簡體   English   中英

訪問OpenCV中灰度圖像的像素值

[英]accessing pixel value of gray scale image in OpenCV

我只是想明白我的概念 - 訪問cv :: Mat的所有矩陣元素意味着我實際上訪問了圖像的所有像素值(灰度 - 1通道和顏色 - 3通道)? 就像假設我的代碼用於打印加載1通道圖像並鍵入CV_32FC1的灰度矩陣的值,如下所示,那么這是否意味着我只訪問cv :: mat的成員或者我正在訪問圖像的像素值(1通道 - 灰度和CV_32FC1型)也?

    cv::Mat img = cv::imread("lenna.png");
    for(int j=0;j<img.rows;j++) 
    {
    for (int i=0;i<img.cols;i++)
      {
        std::cout << "Matrix of image loaded is: " << img.at<uchar>(i,j);
      }
    }

我對OpenCV的圖像處理很陌生,想要清除我的想法。 如果我錯了,那么如何訪問圖像的每個像素值?

您正在訪問矩陣的元素,您也正在訪問圖像本身。 在您的代碼中,執行此操作后:

 cv::Mat img = cv::imread("lenna.png");

矩陣img代表圖像lenna.png。 (如果成功打開)

為什么不通過更改某些像素值來體驗自己:

 cv::Mat img = cv::imread("lenna.png");
//Before changing
cv::imshow("Before",img);
//change some pixel value
for(int j=0;j<img.rows;j++) 
{
  for (int i=0;i<img.cols;i++)
  {
    if( i== j)   
       img.at<uchar>(j,i) = 255; //white
  }
}
//After changing
cv::imshow("After",img);

注意:這只會更改易失性內存中的圖像值,即當前加載mat img的位置。 修改mat img的值,不會改變存儲在磁盤中的實際圖像“lenna.png”中的值(除非你是imwrite)

但是對於1通道灰度圖像,它是CV_8UC1而不是CV_32FC1

為了獲得灰度圖像的像素值(0到255之間的整數),答案也需要進行類型轉換。

int pixelValue = (int)img.at<uchar>(i,j);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM