读取未知深度和通道编号的图像后,我想逐个访问其像素。从未知类型的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