OpenCV 涵數(shù)threshold和像素

通過官方文檔我們可以列出涵數(shù)threshold的幾個參數(shù)的含義:

src: 輸入的灰度圖像的地址。
dst: 輸出圖像的地址姨丈。
threshold: 進行閾值操作時閾值的大小燎斩。
maxval: 設(shè)定的最大灰度值(該參數(shù)運用在二進制與反二進制閾值操作中)。
type: 閾值的類型时迫。從上面提到的5種中選擇出的結(jié)果椎扬。

src和dst可以很好的理解惫搏,那么這里的第三個參數(shù)是用來做什么的了!這里就說來話長了請看下面一一道來蚕涤。
就用下面這個蘋果來做例子把:


image.png

我們想要獲取它的平面二維圖,這個是不是有個特點筐赔,它的背影是白色的,除了白色就是平面圖了钻趋。那么我要怎么把它給挖出來了川陆。就是把所有的黑色和灰色拿下來就可以了,只要不是白色。
說到這里了就和我們涵數(shù)threshold搭上邊了较沪。

threshold("這里是放輸入圖片地址","輸出圖片地址", 50, 255, CV_THRESH_BINARY);
這個50是最小滿足黑色值要求(0是最黑的數(shù)值鳞绕,255為白色),比50色素小或等于50的部分保留下來其它的全為255白色尸曼。CV_THRESH_BINARY就是代表以這種邏輯使用函數(shù)们何。
/* Threshold types */
enum
{
    CV_THRESH_BINARY      =0,  /* value = value > threshold ? max_value : 0       */
    CV_THRESH_BINARY_INV  =1,  /* value = value > threshold ? 0 : max_value       */
    CV_THRESH_TRUNC       =2,  /* value = value > threshold ? threshold : value   */
    CV_THRESH_TOZERO      =3,  /* value = value > threshold ? value : 0           */
    CV_THRESH_TOZERO_INV  =4,  /* value = value > threshold ? 0 : value           */
    CV_THRESH_MASK        =7,
    CV_THRESH_OTSU        =8  /* use Otsu algorithm to choose the optimal threshold value;
                                 combine the flag with one of the above CV_THRESH_* values */
};
從上面可以看出這里的type有8種之多,那么其它代表什么含義了控轿。
CV_THRESH_BINARY_INV   比50色素大且不等于50的部分保留下來其它的全為255白色
CV_THRESH_TRUNC  比50色素小或等于50的部分保留下來冤竹,大于的都被設(shè)為50
CV_THRESH_TOZERO  1 像素點的灰度值大于該閾值50的不進行任何改變;2 像素點的灰度值小于該閾值50的茬射,其灰度值全部變?yōu)?鹦蠕。
CV_THRESH_TOZERO_INV  像素點的灰度值小于該閾值50的不進行任何改變,而大于該閾值50的部分在抛,其灰度值全部變?yōu)?钟病。

像素:
一般我們圖片都是有RGB組成的,也就是紅藍綠主色組成的刚梭。他們的色素滿值都是255.

//這是單通道代碼
- (UIImage *)getPixelImage:(UIImage *)img {
    cv::Mat resultImage;
    UIImageToMat(img, resultImage);
    for (int row = 0; row < resultImage.rows; row++)
    {
        for (int col = 0; col < resultImage.cols; col++)
        {
            /* 注意 Mat::at 函數(shù)是個模板函數(shù), 需要指明參數(shù)類型, 因為這張圖是具有紅藍綠三通道的圖,
             所以它的參數(shù)類型可以傳遞一個 Vec3b, 這是一個存放 3 個 uchar 數(shù)據(jù)的 Vec(向量). 這里
             提供了索引重載, [2]表示的是返回第三個通道, 在這里是 Red 通道, 第一個通道(Blue)用[0]返回 */
            if(resultImage.at<cv::Vec3b>(row, col)[3] > 128)
                resultImage.at<cv::Vec3b>(row, col) = cv::Vec3b(255, 255, 255);
        }
    }
    UIImage *numberImage = MatToUIImage(resultImage);
    return numberImage;
}
這里兩個for可以理解為獲取坐標軸(x,y)肠阱,主要通過這種方式來獲取每個點的像素。[3]這個數(shù)是用來獲取紅藍綠的每個通道朴读。給獲取到的通道賦上白色屹徘。

多通道,也就是三通道

//多通道
- (UIImage *)getPixelImages:(UIImage *)img {
    cv::Mat resultImage;
    UIImageToMat(img, resultImage);
    for (int row = 0; row < resultImage.rows; row++)
    {
        for (int col = 0; col < resultImage.cols; col++)
        {
            //主要是這里的代碼(這里是條件語句衅金,獲取那些滿足最小黑色像素的值)
            if(*(resultImage.data + resultImage.step[0] * row + resultImage.step[1] * col + resultImage.elemSize1() * 2) > 50)
            {
                //[row, col]像素的第 1 通道地址被 * 解析(blue通道)
                *(resultImage.data + resultImage.step[0] * row + resultImage.step[1] * col) = 255;
                //[row, col]像素的第 2 通道地址被 * 解析(green通道), 關(guān)于elemSize1函數(shù)的更多描述請見 Fn1 里所列的博文鏈接
                *(resultImage.data + resultImage.step[0] * row + resultImage.step[1] * col + resultImage.elemSize1()) = 255;
                //[row, col]像素的第 3 通道地址被 * 解析(red通道)
                *(resultImage.data + resultImage.step[0] * row + resultImage.step[1] * col + resultImage.elemSize1() * 2) = 255;
            }
        }
    }
    UIImage *numberImage = MatToUIImage(resultImage);
    return numberImage;
}
這里就對滿足條件的像素進行改變噪伊,這里也是改為白色。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末典挑,一起剝皮案震驚了整個濱河市酥宴,隨后出現(xiàn)的幾起案子啦吧,更是在濱河造成了極大的恐慌您觉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件授滓,死亡現(xiàn)場離奇詭異琳水,居然都是意外死亡,警方通過查閱死者的電腦和手機般堆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門在孝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淮摔,你說我怎么就攤上這事私沮。” “怎么了和橙?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵仔燕,是天一觀的道長造垛。 經(jīng)常有香客問我,道長晰搀,這世上最難降的妖魔是什么五辽? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮外恕,結(jié)果婚禮上杆逗,老公的妹妹穿的比我還像新娘。我一直安慰自己鳞疲,他們只是感情好罪郊,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尚洽,像睡著了一般排龄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翎朱,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天橄维,我揣著相機與錄音,去河邊找鬼拴曲。 笑死争舞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的澈灼。 我是一名探鬼主播竞川,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叁熔!你這毒婦竟也來了委乌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荣回,失蹤者是張志新(化名)和其女友劉穎遭贸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體心软,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡壕吹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了删铃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耳贬。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖猎唁,靈堂內(nèi)的尸體忽然破棺而出咒劲,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布腐魂,位于F島的核電站慕的,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挤渔。R本人自食惡果不足惜肮街,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望判导。 院中可真熱鬧嫉父,春花似錦、人聲如沸眼刃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擂红。三九已至仪际,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昵骤,已是汗流浹背树碱。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留变秦,地道東北人成榜。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像蹦玫,于是被迫代替她去往敵國和親赎婚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,700評論 0 3
  • 前言opencv在圖像處理中使用廣泛樱溉,許多常見的應用場景例如人臉識別挣输,車牌識別等都是基于opencv開發(fā)的。本文是...
    肖丹晨閱讀 5,000評論 0 4
  • 這個Wave Cabinet 柜子是來自國外設(shè)計師Joy Division的杰作福贞,從外觀上看和普通柜子差別不大撩嚼,不...
    泥巴創(chuàng)客空間_f6db閱讀 711評論 0 0
  • 窗外陰雨綿綿,濕冷的空氣令人沉悶肚医。 上班沒多久绢馍,注射室里就來了一個女學生,打破傷風抗毒疫苗肠套,頭上手上包扎著紗布,紗...
    山居中人閱讀 387評論 0 2
  • 隨著行業(yè)的高速發(fā)展猖任,越來越多傳統(tǒng)行業(yè)的銷售人員開始往互聯(lián)網(wǎng)轉(zhuǎn)型你稚。 一個互聯(lián)網(wǎng)產(chǎn)品團隊,核心角色是產(chǎn)品、運營刁赖、研發(fā)搁痛、...
    一直以來都很好閱讀 235評論 0 0