整理一些顏色分割方法。
實驗圖片
:
其中紅色部分比較突出,嘗試將其分割出來。
1、經驗閾值提取
RGB轉到HSV空間,通過統計的經驗閾值設定紅色範圍,結果如下:
圖1
代碼:
#include "cv.h"
#include "highgui.h"
int main()
{
IplImage *img;
img=cvLoadImage("e:\\test.bmp",1);
IplImage *hsv;
hsv=cvCreateImage(cvGetSize(img),8,3);
cvCvtColor(img,hsv,CV_BGR2HSV);
IplImage *RBin;
RBin=cvCreateImage(cvGetSize(img),8,1);
CvScalar t;
for(int i=0;i<img->height;i++)
{
for(int j=0;j<img->width;j++)
{
t=cvGet2D(hsv,i,j);
//經驗閾值範圍
if ((((t.val[0]>=0)&&(t.val[0]<=10))||((t.val[0]>=312)&&(t.val[0]<=360)))&&((t.val[1]>=43)&&(t.val[1]<=255)))
{
cvSetReal2D(RBin,i,j,1); // 紅色通道
}
}
}
cvNamedWindow("RBin",1);
cvShowImage("RBin",RBin);
cvSaveImage("RBin.bmp",RBin);
cvReleaseImage(&hsv);
cvReleaseImage(&RBin);
cvWaitKey(0);
}
這個效果還是可以接受的,但是通用性如何?
當顏色比較暗,即光線不夠理想的時候,效果很差。
2、利用複雜些的方法
參看彩色圖像分割綜述資料,大體分四類:
一:基於鄰域的方法。
1、區域生長和區域分裂的方法。