转换为hsv后如何获取特定像素的值? [英] How to get value of specific pixel after converting to hsv?

查看:112
本文介绍了转换为hsv后如何获取特定像素的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个小程序,通过将图像转换为hsv来检测红色.为了检测红色,我使用最小范围170,160,160和最大范围180,255,255.因此,我得到了hsv图像,该图像显示白色为红色.现在,我想知道该白色像素的值.我知道x,y坐标.如何获得像素值?我正在使用python和cv2.

I have created a small program to detect red color by converting image to hsv. For detecting red color I am using the min range 170,160,160 and max range 180,255,255. So I got hsv image which shows red color in white. Now I want to know the value of that white pixel. I know the x,y coordinate.How would I get pixel value? I am using python and cv2.

推荐答案

所以您已经有了x和y,

So you already have x and y,

->只需创建1X1大小的ROI Mat

-> Just create ROI Mat with 1X1 size

->使用CvtColor()转换HSV颜色空间

-> Convert HSV colour space using CvtColor()

->访问上述结果的像素值

-> Access pixel value of above result

Mat image; //load image here
Mat HSV;
Mat RGB=image(Rect(x,y,1,1)); // use your x and y value

cvtColor(RGB, HSV,CV_BGR2HSV);
Vec3b hsv=HSV.at<Vec3b>(0,0);
int H=hsv.val[0]; //hue
int S=hsv.val[1]; //saturation
int V=hsv.val[2]; //value

您可以参考下面的C ++代码,该代码将显示对应于鼠标位置的像素的RGB和HSV值.

You can refer below C++ code which will display RGB and HSV value for the pixel corresponding mouse position.

char window_name[30] = "HSV Segmentation";
Mat src;

static void onMouse( int event, int x, int y, int f, void* ){
 Mat image=src.clone();
 Vec3b rgb=image.at<Vec3b>(y,x);
 int B=rgb.val[0];
 int G=rgb.val[1];
 int R=rgb.val[2];

  Mat HSV;
  Mat RGB=image(Rect(x,y,1,1));
  cvtColor(RGB, HSV,CV_BGR2HSV);

    Vec3b hsv=HSV.at<Vec3b>(0,0);
    int H=hsv.val[0];
    int S=hsv.val[1];
    int V=hsv.val[2];

    char name[30];
    sprintf(name,"B=%d",B);
    putText(image,name, Point(150,40) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"G=%d",G);
    putText(image,name, Point(150,80) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"R=%d",R);
    putText(image,name, Point(150,120) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"H=%d",H);
    putText(image,name, Point(25,40) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"S=%d",S);
    putText(image,name, Point(25,80) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"V=%d",V);
    putText(image,name, Point(25,120) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );

    sprintf(name,"X=%d",x);
    putText(image,name, Point(25,300) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,0,255), 2,8,false );

    sprintf(name,"Y=%d",y);
    putText(image,name, Point(25,340) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,0,255), 2,8,false );

 //imwrite("hsv.jpg",image);
 imshow( window_name, image );
}



int main(){
 src = imread("bgr.png",1);
 imshow(window_name,src);
 setMouseCallback( window_name, onMouse, 0 );
 waitKey();  
 }

这篇关于转换为hsv后如何获取特定像素的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆