Visual studio 2008 从RGB到HSV阈值的OpenCV图像转换

Visual studio 2008 从RGB到HSV阈值的OpenCV图像转换,visual-studio-2008,image-manipulation,opencv,Visual Studio 2008,Image Manipulation,Opencv,这是我的密码。当我执行它的时候。给定任意一个arbit图像。它总是以全黑或全白图像的形式给出结果。迭代有什么问题吗 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); //conve

这是我的密码。当我执行它的时候。给定任意一个arbit图像。它总是以全黑或全白图像的形式给出结果。迭代有什么问题吗

    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);
int main(无效)
{
int i=0,j=0,高度=0,宽度=0,步长=0,k=0;
Mat img_hsv、img_rgb、红色斑点、蓝色斑点;
//正在读取图像…rgb格式(默认)…CV_8U3C
img_rgb=imread(“pic.png”,1);
//将rgb图像转换为hsv格式以应用进一步的操作
CVT颜色(img_rgb、img_hsv、CV_BGR2HSV);
//定义各种组件值或指向这些组件值的指针
//HSV格式的组件…色调、sat和值
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);
//要显示的命名窗口

//对于(i=0;i我想我已经在之前的评论中回答了这个问题,现在正在思考它。 更具体

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)的东西吗?

我提到的完全黑白图像是基于h的阈值变化的。(我尝试将其从1更改为180)!!仍然只有2个结果…完全黑色或完全白色的图像…是的,在我尝试的其中一个图像中的128处发生更改..img_h等为常量,像素值为(0,0),这是故意的吗???我想这是你的问题好吧…再次感谢!!!我应该承认我是一个新手…所以这样的错误很容易发生…!!!嘿…泽姆…我实际上在做一个关于图像处理的项目…你能把你的邮件id发送给我吗kaushalyjain@gmail.com所以我可以亲自向你提出疑问吗?(只有在你愿意的情况下)你应该在这里问,这样其他人也可以帮忙。我只是在休息时间问,否则我会很忙;)