1. 程式人生 > 程式設計 >使用OpenCV獲取影象某點的顏色值,並設定某點的顏色

使用OpenCV獲取影象某點的顏色值,並設定某點的顏色

以下用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獲取影象某點的顏色值,並設定某點的顏色

補充知識: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獲取影象某點的顏色值,並設定某點的顏色就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。