2010-06-10 170 views
0

这是我的代码。当我执行它。鉴于任何仲裁形象。它总是给出一个完全黑色或完全白色的图像。迭代有什么问题吗?从RGB到HSV的OpenCV图像转换阈值痛苦

int main(void) 
{ 

int i=0,j=0,height=0,width=0,step=0,k=0; 
Mat img_hsv,img_rgb,red_blob,blue_blob; 
//reading image... rgb format(default)... CV_8U3C 
img_rgb = imread("pic.png",1); 
//converting rgb image to hsv format for applying further operations 
cvtColor(img_rgb,img_hsv,CV_BGR2HSV); 
//defining the various component values or rather the pointer to those 
//components of HSV format... hue, sat and value 
uchar img_h=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize()); 
uchar img_s=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize()+1); 
uchar img_v=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize()+2); 
//naming window to be displayed 
//for(i=0;i<1000;i++){j=i;cout<<img_h;if(img_h==170)cout<<"yesss";} 
namedWindow("win1", CV_WINDOW_AUTOSIZE); 
Mat img_bw(img_hsv.rows,img_hsv.cols,CV_8U); 
imshow("win1", img_hsv); 
//applying threshold and hence applying conversions 
//by iterating over the entire image// 
for(i=0;i<img_hsv.rows;i++){ 
    for(j=0;j<img_hsv.cols;j++){ 
    if((img_h>120)) && (img_s>150 || img_s<25) && (img_v>150)) 
     *(img_bw.data+i*img_bw.step+j*img_bw.elemSize())=255; 
    else *(img_bw.data+i*img_bw.step+j*img_bw.elemSize())=0; 
    } 
} 
imshow("win1", img_bw); 

感谢您的提前回复!

+0

我提到的完全黑色或白色图像是基于h的阈值变化的...(我试图将其从1改变到180)!仍然只有2个结果...要么是完全黑色的,要么是完全白色的图像...并且是在我尝试过的其中一个图像中出现128更改。 – Kaushal 2010-06-10 20:06:31

+0

img_h等等是恒定的,并且像素值(0,0) ,这是打算?我想这就是你的问题 – zerm 2010-06-10 20:08:37

回答

1

我想我已经在我以前的评论中回答了这个问题,现在想起来了。 更具体

uchar img_h=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize()); 

给你(I,J)的像素,而(I,J)初始化为(0,0)。因此,如果(0,0)处的第一个像素低于阈值,则会得到完全黑色的图像,否则将显示白色图像。 您可能宁愿在每次迭代中重新计算img_h,img_s和img_v。

在pre-cv2.x中,有一个宏可以像CV_IMAGE_ELEM那样访问像素,请阅读手册中的替换项。现在不应该有像img_hsv(i,j)那样的东西吗?

+0

好的......再次感谢!!!我应该承认我是新手......所以这样的错误很容易发生...... !!! 嘿... zerm ...我实际上正在做一个图像处理项目...你可以发送你的邮件ID到[email protected]所以dat我可以问你个人怀疑吗?(只有当你想..) – Kaushal 2010-06-10 20:23:55

+0

你应该在这里问,所以其他人也可以帮忙。我只是在我的休息时间做,否则我是一个非常繁忙的人;) – zerm 2010-06-10 20:26:34

+0

我看.... ....好吧...! – Kaushal 2010-06-10 20:57:47