在瀏覽影像并進行索引時(i, j),OpenCV提供了中的at方法cv::Mat。為了獲得該像素的正確值,我們需要仔細指定資料型別,否則我們可能會得到一些意想不到的值。
例如,如果您使用CV_16SC3如下創建 cv::Mat :
cv::Mat img(h, w, CV_16SC3, cv::Scalar(-32, -64, -64));
索引值時,您應該使用cv::Vec3s如下:
img.at<cv::Vec3s>(i, j)[c]
如果你使用 soem 其他型別,img.at<cv::Vec3f>你會得到一些錯誤的值。
現在我們知道了填寫正確資料型別的重要性,下表就是我所知道的要輸入什么資料型別才能獲得正確的值。
CV_8UC3 -> cv::Vec3b CV_8UC1 -> uchar
CV_8SC3 CV_8SC1 -> char
CV_16UC3 -> cv::Vec3w CV_16UC1 -> ushort
CV_16SC3 -> cv::Vec3s CV_16SC1 -> short
CV_32SC3 -> cv::Vec3i CV_32SC3 -> int
CV_64FC3 -> cv::Vec3d CV_64FC1 -> double
CV_32FC3 -> cv::Vec3f CV_32FC1 -> float
CV_16FC3 -> CV_16FC1 ->
我想知道CV_8SC3, CV_16FC3, CV_16FC1,為了獲得正確的值,我應該寫什么資料型別?提前致謝 !
uj5u.com熱心網友回復:
您可以根據自己的需求定義自己的專業。只是Vec<T,n> 最流行的專業化的cv::Vecxx一堆較短的別名
所以:
- 因為
CV_8SC3,你可以使用cv::Vec<char, 3>, - 因為
CV_16FC3,你可能會使用cv::Vec<cv::float16_t, 3>. - 因為
CV_16FC1,你可能會使用cv::Vec<cv::float16_t, 1>.
此外,如果您只想遍歷 a cv::Mat,實際上有很多方法可以做到這一點,例如,該at方法有這個多載版本:
template<typename _Tp >
const _Tp& cv::Mat::at (int i0, int i1, int i2) const
我希望這份官方檔案對您有更多幫助: https ://docs.opencv.org/4.x/db/da5/tutorial_how_to_scan_images.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417527.html
標籤:
下一篇:如何從彩色矩形構建cv::Mat
