国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

[OpenCVsharp]利用指針實(shí)現(xiàn)高速訪問(wèn)像素RGB值

2019-11-14 13:55:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

先簡(jiǎn)單介紹下什么是OpenCVsharp,內(nèi)容取自百度百科

OpenCvSharp是一個(gè)OpenCV的.Net wrapper,應(yīng)用最新的OpenCV庫(kù)開(kāi)發(fā),使用習(xí)慣比EmguCV更接近原始的OpenCV,有詳細(xì)的使用樣例供參考。該庫(kù)采用LGPL發(fā)行,對(duì)商業(yè)應(yīng)用友好。使用OpenCvSharp,可用C#,VB.NET等語(yǔ)言實(shí)現(xiàn)多種流行的圖像處理(image PRocessing)與計(jì)算機(jī)視覺(jué)(computer vision)算法。

 

下面進(jìn)入正題:

 

代碼實(shí)現(xiàn)目的: 通過(guò)獲取像素值然后進(jìn)行判斷,最終對(duì)像素值進(jìn)行更改。

先介紹個(gè)比較低速效率不高的方法

 
private void SearchAviColorYIQ(iplImage img){    using (IplImage src = img.Clone())    using (IplImage dst = new IplImage(src.Size, BitDepth.U8, 3))    using (IplImage r = new IplImage(src.Size, BitDepth.U8, 1))    using (IplImage g = new IplImage(src.Size, BitDepth.U8, 1))    using (IplImage b = new IplImage(src.Size, BitDepth.U8, 1))    {        src.CvtColor(dst, ColorConversion.BgrToRgb);        dst.Split(r, g, b, null);  //將圖像分割成單獨(dú)的R,G,B圖形         int dr, dg, db;//RGB        double y, i, q;        int h, w;        for (h = 0; h < dst.Height; ++h)   //用for循環(huán)進(jìn)行遍歷        {//270            for (w = 0; w < dst.Width; ++w)            {//360                dr = (int)r[h, w].Val0;                dg = (int)g[h, w].Val0;                db = (int)b[h, w].Val0;                //將RGB模式轉(zhuǎn)換為YIQ模型,并只識(shí)別黃色                y = (0.299 * dr) + (0.587 * dg) + (0.114 * db);                i = (0.596 * dr) + ((-0.274) * dg) + ((-0.322) * db);                q = (0.211 * dr) + ((-0.523) * dg) + (0.312 * db);                 if ((i >= 1) && (q < -4.0))                {                    dst[h, w] = CvColor.White;                }                else                {                    dst[h, w] = CvColor.Black;                }            }        }        pictureBoxIpl2.ImageIpl = dst;    }}

  

下面是用指針實(shí)現(xiàn)快速高效訪問(wèn)圖片像素值

 
private void SearchBlockforYIQ(IplImage img){    using (IplImage src = img.Clone())    using (IplImage dst = new IplImage(src.Size, BitDepth.U8, 3))    {        src.CvtColor(dst, ColorConversion.BgrToRgb);//將bgr轉(zhuǎn)為rgb         int h, w;        int index;        double y, i, q;         unsafe        {            byte* ptr = (byte*)dst.ImageData;            byte r, g, b;            for (h = 0; h < dst.Height; ++h)            {//270                for (w = 0; w < dst.Width; ++w)                {//360                    index = (dst.WidthStep * h) + (w * 3);                    r = ptr[index];                    g = ptr[index + 1];                    b = ptr[index + 2];                     y = (0.299 * r) + (0.587 * g) + (0.114 * b);                    i = (0.596 * r) + ((-0.274) * g) + ((-0.322) * b);                    q = (0.211 * r) + ((-0.523) * g) + (0.312 * b);                     if ((i >= 1) && (q < -4.0))//檢測(cè)黃色                    {//變更為白色(白色的rgb值都是255)                        ptr[index] = 255;                        ptr[index + 1] = 255;                        ptr[index + 2] = 255;                    }                    else                    {//變更為黑色(黑色的RGB值都是0)                        ptr[index] = 0;                        ptr[index + 1] = 0;                        ptr[index + 2] = 0;                    }                }            }        }        pictureBoxIpl2.ImageIpl = dst;    }}

  

以上是全部代碼,20~23行部分是核心部分。僅供參考!

 

PS: unsafe的使用方法

不知道的同學(xué)直接使用上述代碼的話,在unsafe部分可能會(huì)提示出錯(cuò),這時(shí)我們就要根據(jù)下面步驟來(lái)設(shè)置:

1. 右擊項(xiàng)目選擇屬性

1

2. 在生成的選項(xiàng)卡下將“允許不安全代碼”前面的勾勾上。

2

 

這樣設(shè)置后就可以正常使用unsafe了。

轉(zhuǎn)載請(qǐng)注明原處: http://www.harleygwak.com/?p=467


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 务川| 巨野县| 铁岭县| 钟祥市| 太和县| 柏乡县| 高州市| 寿宁县| 安新县| 大足县| 方山县| 水城县| 凤城市| 潮州市| 龙里县| 酒泉市| 阿拉善盟| 财经| 新闻| 巴塘县| 尉犁县| 汉阴县| 嘉黎县| 剑河县| 房山区| 弥渡县| 航空| 河南省| 江安县| 兰溪市| 香格里拉县| 安岳县| 寿阳县| 秭归县| 隆德县| 徐闻县| 密山市| 蒙城县| 黄山市| 武川县| 温宿县|