想換一下CSDN賬戶的頭像,換成自己的真實的頭像,但是又不想那麼直接,乾脆就把頭像轉換成二值圖得了,因為從二值映像是推不出來原圖的。這個過程需要OpenCV的兩個函數,第一個函數是彩色映像轉化為灰階映像:cvtColor函數;下一個函數是由灰階圖轉化為二值映像函數:threshold函數。用法很簡單,代碼如下:
cvtColor(img_origin,img_gray,CV_BGR2GRAY); threshold(img_gray,img_binary,145,255,THRESH_BINARY); imwrite("/home/hon/result.jpg",img_binary); imshow("binary image",img_binary);
既然說到了這兩個函數,就說說這兩個函數的用法吧。這兩個函數都是OpenCV中C++系列的函數,函數沒有首碼cv(大部分參考書籍上介紹的OpenCV函數是c系列的,有首碼cv)。
cvtColor函數:
原型:
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
src和dst分別是待轉的映像(src)和待轉映像轉換後的映像(dst);code是一個掩碼,表示由src到dst之間是怎麼轉的,比如是彩色轉為灰階,還是彩色轉為HSI模式;最後的dstCn表示dst映像的波段數,這個值預設是0,它可以從參數code中推斷。
code的模式包括:
CV_RGB2GRAY:<彩色映像---灰階映像>
CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB <BGR空間---YChCb空間>
CV_BGR2HSV,
CV_RGB2HSV, CV_HSV2BGR, CV_HSV2RGB <RGB空間---HSV空間>
更多的變換資訊可以參考 OpenCV 2.4.5 documentation:http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#void%20cvtColor%28InputArray%20src,%20OutputArray%20dst,%20int%20code,%20int%20dstCn%29
threshold函數:
原型:
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
src和dst分別是待處理的映像(src)和由src產生的二值映像(dst);thresh是閾值,所謂的閾值函數就肯定要有個閾值;maxval在某些模式使用,type就是模式了。
code的模式包括:
| 值 |
計算方法 |
| THRESH_BINARY |
|
| THRESH_BINARY_INV |
|
| THRESH_TRUNC |
|
| THRESH_TOZERO |
|
| THRESH_TOZERO_INV |
|
參考相關文檔:OpenCV 2.4.5 documentation:http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#cv.Threshold
注意:threshold函數針對的是單通道映像,這個一定要注意!