使用OpenCV獲取影象某點的顏色值,並設定某點的顏色
阿新 • • 發佈:2020-06-03
以下用OpenCV實現獲取影象中某點的顏色值,並設定某點區域的顏色
#include <opencv2\opencv.hpp> using namespace cv; vector<char*> listFiles(const char * dir); int main() { Mat img = imread("D:\\OpencvTest\\test.jpg"); Scalar color = img.at<Vec3b>(150,150);//讀取原影象(150,150)的BGR顏色值,如果是灰度影象,將Vec3b改為uchar for (size_t row=0; row<50; row++) for (size_t col=0;col<img.cols;col++) { //設定原影象中某點的BGR顏色值 img.at<Vec3b>(row,col) = Vec3b(color(0),color(1),color(2)); } cv::circle(img,Point(150,150),4,cv::Scalar(0,255));//在影象中畫出特徵點,2是圓的半徑 imshow("img",img); waitKey(0); return 0; }
執行效果:
補充知識:opencv中對圖片的二值化操作並提取特定顏色區域
我就廢話不多說了,大家還是直接看程式碼吧!
#include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> #include <vector> #include<iostream> #include<string> using namespace std; using namespace cv; //bgr影象 Mat bgr; //HSV影象 Mat hsv; //色相 int hmin = 0;//h分量取下限 int hmax = 180;//h分量取上限 int h_Max = 180; //h分量可取的最大值 //飽和度 int smin = 0;//s分量取下限 int smax = 255;//s分量取上限 int s_Max = 255;//s分量可取的最大值 //亮度 int vmin = 0;//v分量取下限 int vmax = 255;//v分量取上限 int v_Max = 255;//v分量可取的最大值 string windowName = "src"; string dstName = "dst"; //輸出影象 Mat dst; //回撥函式 void callBack(int,void*) { //輸出影象分配記憶體 dst = Mat::zeros(bgr.size(),bgr.type()); Mat mask; inRange(hsv,Scalar(hmin,smin,vmin),Scalar(hmax,smax,vmax),mask); for (int r = 0; r < bgr.rows; r++) { for (int c = 0; c < bgr.cols; c++) { if (mask.at<uchar>(r,c) == 255) { dst.at<Vec3b>(r,c)[0] = bgr.at<Vec3b>(r,c)[0]; dst.at<Vec3b>(r,c)[1] = bgr.at<Vec3b>(r,c)[1]; dst.at<Vec3b>(r,c)[2] = bgr.at<Vec3b>(r,c)[2]; } } } imshow("mask",mask); //輸出圖片 imshow("dst",dst); } int main() { //輸入圖片 Mat srcImage = imread("C:\\Users\\Administrator\\Desktop\\0001.jpg"); if (!srcImage.data){ cout << "圖片讀取失敗" << endl; system("pause"); return -1; } imshow(windowName,srcImage); bgr = srcImage; //顏色空間轉換 cvtColor(bgr,hsv,COLOR_BGR2HSV); //定義輸出影象的顯示視窗 namedWindow(dstName,0); //調節色相 H createTrackbar("hmin",dstName,&hmin,h_Max,callBack); createTrackbar("hmax",&hmax,callBack); //調節飽和度 S createTrackbar("smin",&smin,s_Max,callBack); createTrackbar("smax",&smax,callBack); //調節亮度 V createTrackbar("vmin",&vmin,v_Max,callBack); createTrackbar("vmax",&vmax,callBack); callBack(0,0); waitKey(0); return 0; }
以上這篇使用OpenCV獲取影象某點的顏色值,並設定某點的顏色就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。