[英]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.