c++ - 从未知类型的 cv::Mat 获取 cv::Scalar

标签 c++ opencv

在读取未知深度和 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/

相关文章:

opencv - OpenCV的针孔校准模型可以降低FOV,我应该使用Fisheye吗?

c++ - `decltype(auto)` 变量是否有任何实际用例?

c++ - 你如何运行你的单元测试?编译器标志?静态库?

python-3.x - 如何使用 PyTesseract 消除图像噪声以改善结果?

ios - Objective C 中 iOS 的图像模糊检测

java - java 中的 opencv 使用 MAT 而不是 vector 作为标签

c++ - 如何将值从 C++ 可执行文件传递到 Rails 应用程序?

c++ - 标准化直方图?

c++ - JUCE: slider ,ValueTree 错误

opencv - 用于智能手机的 SIFT 硬件加速器