如何在代码中使用白色

时间:2012-08-29 07:40:31

标签: c opencv detect

如何检测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;
}

1 个答案:

答案 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