讀取未知深度和通道編號的圖像後,我想逐個訪問其像素。從未知類型的cv :: Mat獲得cv :: Scalar
上的OpenCV的1.x代碼雲:
IplImage * I = cvLoadImage("myimage.tif");
CvScalar pixel = cvGet2D(I, y, x);
但OpenCV的2.X的cv::Mat.at()
方法的要求,我知道圖像的類型:
cv::Mat I = cv::imread("myimage.tif");
if(I.depth() == CV_8U && I.channels() == 3)
cv::Vec3b pixel = I.at<cv::Vec3b>(x, y);
else if(I.depth() == CV_32F && I.channels() == 1)
float pixel = I.at<cv::float>(x, y);
有類似cvGet2D
功能如果不知道編譯時的圖像類型,它可以接收cv::Mat
並返回cv::Scalar
?
同意。但是缺乏這個功能會讓很多C++初學者感到困惑,因爲如果他們想要處理灰度和彩色圖像,這需要初學者編寫動態模板像素類型調度函數。 – rwong