在读取未知深度和 channel 数的图像后,我想一个一个地访问它的像素。
在 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++ 初学者......
... 和/或只需要节省几秒钟的代码输入时间即可完成的黑客 the last project
cv::Mat mat = ...; // something
cv::Scalar value = cv::mean(mat(cv::Rect(x, y, 1, 1)));
(免责声明:此代码的浪费程度仅略低于为革命事业而死的年轻人。)
关于c++ - 从未知类型的 cv::Mat 获取 cv::Scalar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501805/