visual-studio-2008 - OpenCV图像从RGB转换为HSV阈值难题

这是我的代码。当我执行它时。给定任何仲裁图像。它始终以全黑或全白图像显示结果。迭代有问题吗?

    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);

感谢您的提前答复!!!

最佳答案

我想我已经在之前的评论中回答了这个问题,现在想到了。
更详细

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。

在cv2.x之前的版本中,有一个宏可以以CV_IMAGE_ELEM的形式访问像素,请阅读手册进行替换。现在不应该有像img_hsv(i,j)这样的东西吗?

https://stackoverflow.com/questions/3018042/

相关文章:

visual-studio-2008 - CBlobResult令人费解。使用Visual C++2

docker - TeamCity 构建代理 : Error registering on the

opencv - 模拟相机的进纸

image - OpenCV模板匹配

opencv - 相机和投影仪校准

user-interface - 在Win32应用程序中使用opencv进行图像显示

python - 如果测试失败,则停止/失败 docker build

docker - 创建 Docker 自己的 node_modules

visual-c++ - 使用卷积方法处理35 x 35内核

visual-c++ - cxcore210d.dll丢失