如何检测RGB颜色的白色?
我的意思是如何更改代码中的颜色或者我应该在代码中更改什么?
此代码检测红色:
#include"math.h"
#include"conio.h"
#include"cv.h"
#include"highgui.h"
#include"stdio.h"
int main() {
int i,j,k;
int height,width,step,channels;
int stepr, channelsr;
int temp=0;
uchar *data,*datar;
i=j=k=0;
IplImage *frame=cvLoadImage("red.jpg",1);
IplImage *result=cvCreateImage( cvGetSize(frame), 8, 1 );
if(frame==NULL ) {
puts("unable to load the frame");exit(0);
}
printf("frame loaded");
cvNamedWindow("original",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Result",CV_WINDOW_AUTOSIZE);
height = frame->height;
width = frame->width;
step =frame->widthStep;
channels = frame->nChannels;
data = (uchar *)frame->imageData;
stepr=result->widthStep;
channelsr=result->nChannels;
datar = (uchar *)result->imageData;
for(i=0;i < (height);i++) for(j=0;j <(width);j++)
if(((data[i*step+j*channels+2]) > (29+data[i*step+j*channels])) &&
((data[i*step+j*channels+2]) > (29+data[i*step+j*channels+1])))
datar[i*stepr+j*channelsr]=255;
else
datar[i*stepr+j*channelsr]=0;
cvShowImage("original",frame);
cvShowImage("Result",result);
cvSaveImage("result.jpg",result);
cvWaitKey(0);
cvDestroyWindow("original");
cvDestroyWindow("Result");
return 0;
}
答案 0 :(得分:0)
如果您检测到3个rgb通道几乎相等,则会检测从黑色到灰色到白色的颜色。 为了检查白色,您可以检查每个像素
1)明亮
r&gt; 250,g> 250,b> 250
2)颜色几乎相等 abs(r - b)&lt; 2,abs(g-b)&lt; 2,abs(r-g)&lt; 2 *
值250和2只是您应该进行实验的一个示例,直到您获得满意的结果。
您应该使用与上述
相当的代码更改条件if(((data[i*step+j*channels+2]) > (29+data[i*step+j*channels])) &&
((data[i*step+j*channels+2]) > (29+data[i*step+j*channels+1])))
datar[i*stepr+j*channelsr]=255;
else
datar[i*stepr+j*channelsr]=0;
*注意;如果值r,g,b是无符号的(在这种情况下是这样),你应该将数字转换为带符号的
abs((int)r - g)&lt; 2