opencv-訪問Mat中每個像素的值


 

參考:【OpenCV】訪問Mat中每個像素的值(新)   膜拜大佬

 

以下例子代碼均針對8位單通道灰度圖。

 

1 .ptr和[]操作符

 Mat最直接的訪問方法是通過.ptr<>函數得到一行的指針,並用[]操作符訪問某一列的像素值。

Mat image(rows,cols,CV_8UC1); for (int j=0; j<image.rows; j++) { uchar* pdata= image.ptr<uchar>(j); for (int i=0; i<image.cols; i++) { uchar data=pdata[i]; } }

 

2 .ptr和指針操作

除了[]操作符,我們可以使用移動指針*++的組合方法訪問某一行中所有像素的值。

Mat image(rows,cols,CV_8UC1); for (int j=0; j<image.rows; j++) { uchar* pdata= image.ptr<uchar>(j); for (int i=0; i<image.cols; i++) { uchar data=*pdata++; } }

 

3 Mat _iterator

用Mat提供的迭代器代替前面的[]操作符或指針,血統純正的官方方法~

1  Mat image(rows,cols,CV_8UC1); 2 
3     Mat_<uchar>::iterator it=image.begin<uchar>(); 4     Mat_<uchar>::iterator itend=image.end<uchar>(); 5 
6     for (;it != itend;++it) 7  { 8         uchar data=*it; 9     }

 

4 圖像坐標 at

 Mat image(rows,cols,CV_8UC1); for (int j=0; j<image.rows; j++) { for (int i=0; i<image.cols; i++) { uchar data=image.at<uchar>(j,i); } }

 

 

其中,指針*++訪問是最快的方法;另外迭代器訪問雖然安全,但性能遠低於指針運算;通過圖像坐標(j,i)訪問是最慢的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM