如何在转换为hsv后获取特定像素的值?

 fenfei2702936060 发布于 2023-01-19 13:23

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

1 个回答
  • 所以你已经有了x和y,

    - >只需创建1X1尺寸的ROI垫

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

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

    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值.

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

    在此输入图像描述

    2023-01-19 13:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有