>src; createTrackbar(“B”、“colorCtrl”和Bs,255); createTrackbar(“G”、“colorCtrl”和Gs,255); createTrackbar(“R”、“colorCtrl”和Rs,255); 矩阵重构GB(500500,CV_8UC3,标量(Bs,Gs,Rs)); src=gb; CVT颜色(src、hsv、CV_BGR2HSV); imshow(RGB_窗口,src); imshow(HSV_窗口,HSV); setMouseCallback(RGB_窗口,onMouse,0); setMouseCallback(HSV_窗口,onMouse,0); 字符c=等待键(10); 如果(c=='b') {break;} } 返回0; },c++,opencv,image-processing,C++,Opencv,Image Processing" /> >src; createTrackbar(“B”、“colorCtrl”和Bs,255); createTrackbar(“G”、“colorCtrl”和Gs,255); createTrackbar(“R”、“colorCtrl”和Rs,255); 矩阵重构GB(500500,CV_8UC3,标量(Bs,Gs,Rs)); src=gb; CVT颜色(src、hsv、CV_BGR2HSV); imshow(RGB_窗口,src); imshow(HSV_窗口,HSV); setMouseCallback(RGB_窗口,onMouse,0); setMouseCallback(HSV_窗口,onMouse,0); 字符c=等待键(10); 如果(c=='b') {break;} } 返回0; },c++,opencv,image-processing,C++,Opencv,Image Processing" />

在屏幕上打印BGR和HSV颜色值 我们如何在C++ OpenCV中使用PutToScript()来打印屏幕上的单色BGR和HSV值,假设我有一个单色的所有像素的 #include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; char RGB_window[30] = "RGB Window"; char HSV_window[30] = "HSV Window"; Mat src,hsv; 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));//capture that pixel in its own ROI 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 ); //namedWindow("Ref HSV",WINDOW_NORMAL); Mat ref(50,50,CV_8UC3,Scalar(H,S,V)); //imwrite("hsv.jpg",image); imshow( RGB_window, image ); //imshow( "Ref HSV",ref); } int main() { //VideoCapture cap(0); static int Bs=0,Gs=0,Rs=0; namedWindow("colourCtrl"); //src = imread("bgr.png",1); for(;;) { //cap>>src; createTrackbar("B","colourCtrl",&Bs,255); createTrackbar("G","colourCtrl",&Gs,255); createTrackbar("R","colourCtrl",&Rs,255); Mat refRGB(500,500,CV_8UC3,Scalar(Bs,Gs,Rs)); src=refRGB; cvtColor(src,hsv,CV_BGR2HSV); imshow(RGB_window,src); imshow(HSV_window,hsv); setMouseCallback( RGB_window, onMouse, 0 ); setMouseCallback( HSV_window, onMouse, 0 ); char c=waitKey(10); if(c=='b') {break;} } return 0; } #包括 #包括 #包括 使用名称空间std; 使用名称空间cv; 字符RGB_窗口[30]=“RGB窗口”; 字符HSV_窗口[30]=“HSV窗口”; Mat src,hsv; 鼠标上的静态void(int事件、int x、int y、int f、void*){ Mat image=src.clone(); Vec3b rgb=图像。在(y,x)处; intb=rgb.val[0]; int G=rgb.val[1]; int R=rgb.val[2]; Mat-HSV; Mat RGB=image(Rect(x,y,1,1));//在其自身的ROI中捕获该像素 CVT颜色(RGB、HSV、CV_BGR2HSV); Vec3b hsv=在(0,0)处的hsv; inth=hsv.val[0]; int S=hsv.val[1]; int V=hsv.val[2]; 字符名[30]; sprintf(名称,“B=%d”,B); putText(图像、名称、点(150,40)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“G=%d”,G); putText(图像、名称、点(150,80)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“R=%d”,R); putText(图像、名称、点(150120)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“H=%d”,H); putText(图像、名称、点(25,40)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“S=%d”,S); putText(图像、名称、点(25,80)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“V=%d”,V); putText(图像、名称、点(25120)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“X=%d”,X); putText(图像、名称、点(25300)、字体\u HERSHEY\u单纯形、.7、标量(0,0255)、2,8、假); sprintf(名称,“Y=%d”,Y); putText(图像、名称、点(25340)、字体\u HERSHEY\u单纯形、.7、标量(0,0255)、2,8、假); //namedWindow(“参考HSV”,窗口正常); 材料参考(50,50,CV_8UC3,标量(H,S,V)); //imwrite(“hsv.jpg”,图片); imshow(RGB_窗口,图像); //imshow(“参考HSV”,参考); } int main() { //视频捕获上限(0); 静态整数Bs=0,Gs=0,Rs=0; namedWindow(“colorCtrl”); //src=imread(“bgr.png”,1); 对于(;;) { //cap>>src; createTrackbar(“B”、“colorCtrl”和Bs,255); createTrackbar(“G”、“colorCtrl”和Gs,255); createTrackbar(“R”、“colorCtrl”和Rs,255); 矩阵重构GB(500500,CV_8UC3,标量(Bs,Gs,Rs)); src=gb; CVT颜色(src、hsv、CV_BGR2HSV); imshow(RGB_窗口,src); imshow(HSV_窗口,HSV); setMouseCallback(RGB_窗口,onMouse,0); setMouseCallback(HSV_窗口,onMouse,0); 字符c=等待键(10); 如果(c=='b') {break;} } 返回0; }

在屏幕上打印BGR和HSV颜色值 我们如何在C++ OpenCV中使用PutToScript()来打印屏幕上的单色BGR和HSV值,假设我有一个单色的所有像素的 #include<iostream> #include<opencv2/core/core.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; char RGB_window[30] = "RGB Window"; char HSV_window[30] = "HSV Window"; Mat src,hsv; 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));//capture that pixel in its own ROI 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 ); //namedWindow("Ref HSV",WINDOW_NORMAL); Mat ref(50,50,CV_8UC3,Scalar(H,S,V)); //imwrite("hsv.jpg",image); imshow( RGB_window, image ); //imshow( "Ref HSV",ref); } int main() { //VideoCapture cap(0); static int Bs=0,Gs=0,Rs=0; namedWindow("colourCtrl"); //src = imread("bgr.png",1); for(;;) { //cap>>src; createTrackbar("B","colourCtrl",&Bs,255); createTrackbar("G","colourCtrl",&Gs,255); createTrackbar("R","colourCtrl",&Rs,255); Mat refRGB(500,500,CV_8UC3,Scalar(Bs,Gs,Rs)); src=refRGB; cvtColor(src,hsv,CV_BGR2HSV); imshow(RGB_window,src); imshow(HSV_window,hsv); setMouseCallback( RGB_window, onMouse, 0 ); setMouseCallback( HSV_window, onMouse, 0 ); char c=waitKey(10); if(c=='b') {break;} } return 0; } #包括 #包括 #包括 使用名称空间std; 使用名称空间cv; 字符RGB_窗口[30]=“RGB窗口”; 字符HSV_窗口[30]=“HSV窗口”; Mat src,hsv; 鼠标上的静态void(int事件、int x、int y、int f、void*){ Mat image=src.clone(); Vec3b rgb=图像。在(y,x)处; intb=rgb.val[0]; int G=rgb.val[1]; int R=rgb.val[2]; Mat-HSV; Mat RGB=image(Rect(x,y,1,1));//在其自身的ROI中捕获该像素 CVT颜色(RGB、HSV、CV_BGR2HSV); Vec3b hsv=在(0,0)处的hsv; inth=hsv.val[0]; int S=hsv.val[1]; int V=hsv.val[2]; 字符名[30]; sprintf(名称,“B=%d”,B); putText(图像、名称、点(150,40)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“G=%d”,G); putText(图像、名称、点(150,80)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“R=%d”,R); putText(图像、名称、点(150120)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“H=%d”,H); putText(图像、名称、点(25,40)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“S=%d”,S); putText(图像、名称、点(25,80)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“V=%d”,V); putText(图像、名称、点(25120)、字体\u HERSHEY\u单纯形、.7、标量(0255,0)、2,8、假); sprintf(名称,“X=%d”,X); putText(图像、名称、点(25300)、字体\u HERSHEY\u单纯形、.7、标量(0,0255)、2,8、假); sprintf(名称,“Y=%d”,Y); putText(图像、名称、点(25340)、字体\u HERSHEY\u单纯形、.7、标量(0,0255)、2,8、假); //namedWindow(“参考HSV”,窗口正常); 材料参考(50,50,CV_8UC3,标量(H,S,V)); //imwrite(“hsv.jpg”,图片); imshow(RGB_窗口,图像); //imshow(“参考HSV”,参考); } int main() { //视频捕获上限(0); 静态整数Bs=0,Gs=0,Rs=0; namedWindow(“colorCtrl”); //src=imread(“bgr.png”,1); 对于(;;) { //cap>>src; createTrackbar(“B”、“colorCtrl”和Bs,255); createTrackbar(“G”、“colorCtrl”和Gs,255); createTrackbar(“R”、“colorCtrl”和Rs,255); 矩阵重构GB(500500,CV_8UC3,标量(Bs,Gs,Rs)); src=gb; CVT颜色(src、hsv、CV_BGR2HSV); imshow(RGB_窗口,src); imshow(HSV_窗口,HSV); setMouseCallback(RGB_窗口,onMouse,0); setMouseCallback(HSV_窗口,onMouse,0); 字符c=等待键(10); 如果(c=='b') {break;} } 返回0; },c++,opencv,image-processing,C++,Opencv,Image Processing,您可以通过两种方式将向量转换为字符串: 使用std::iostream: Vec3b color = ... std::stringstream ss; ss << color; std::string color_string = ss.str(); 然后可以使用putText在图像上绘制字符串 这是完整的代码。请注意功能bgr2hsv,该功能仅将单个Vec3b从BGR转换为HSV(改编自) #包括 #包括 使用名称空间cv; Vec3b bgr2hsv(Vec3b bgr)

您可以通过两种方式将
向量转换为字符串:

  • 使用
    std::iostream

    Vec3b color = ...
    std::stringstream ss;
    ss << color;
    std::string color_string = ss.str();
    
  • 然后可以使用
    putText
    在图像上绘制字符串

    这是完整的代码。请注意功能
    bgr2hsv
    ,该功能仅将单个
    Vec3b
    从BGR转换为HSV(改编自)

    #包括
    #包括
    使用名称空间cv;
    Vec3b bgr2hsv(Vec3b bgr)
    {
    Mat3b-m(bgr);
    CVT颜色(m、m、颜色_BGR2HSV);
    返回m(0);
    }
    int main()
    {
    //创建绿色图像
    Mat3b-img(200200vec3b(0255,0));
    //获取图像第一个像素的颜色
    Vec3b colorBGR=img(0);
    //获取HSV颜色
    Vec3b colorHSV=bgr2hsv(colorBGR);
    //Vec_uu可直接用于流
    std::stringstream-ss;
    党卫军
    
    Vec3b color = ...
    std::string text = "[" +    std::to_string(color[0]) + ", " + 
                                std::to_string(color[1]) + ", " + 
                                std::to_string(color[2]) + "]";
    
    #include <opencv2\opencv.hpp>
    #include <sstream>
    using namespace cv;
    
    Vec3b bgr2hsv(Vec3b bgr)
    {
        Mat3b m(bgr);
        cvtColor(m, m, COLOR_BGR2HSV);
        return m(0);
    }
    
    int main()
    {
        // Create a green image
        Mat3b img(200, 200, Vec3b(0,255,0));
    
        // Get the color of the first pixel of the image
        Vec3b colorBGR = img(0);
    
        // Get the HSV color
        Vec3b colorHSV = bgr2hsv(colorBGR);
    
        // Vec_<Tp> can be used directly with streams
        std::stringstream ss;
        ss << colorBGR;
        putText(img, ss.str(), Point(10, 50), FONT_HERSHEY_PLAIN, 1, Scalar(255,0,0));
    
        // Or you can build your own string
        std::string text = "[" +    std::to_string(colorHSV[0]) + ", " + 
                                    std::to_string(colorHSV[1]) + ", " + 
                                    std::to_string(colorHSV[2]) + "]";
        putText(img, text, Point(10, 150), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 255));
    
        // Show result
        imshow("img", img);
        waitKey();
    
        return 0;
    }