在屏幕上打印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;
}