Mat.at< >(y,x)表示任意图像深度

时间:2016-10-06 11:41:35

标签: c++ opencv c++11 matrix opencv3.1

简短版

无论数据的深度是多少,使用Mat修改.at<>对象的像素值的最有效,最优雅的方法是什么?或者,是否有另一种没有.at<>的简单方法?

长版

修改mat对象的单个像素时,必须知道跟随调用的矩阵数据的深度:

 m.at<uchar>(1, 2) = 10; //set pixel (1, 2) of Mat m to 10.

如果矩阵不是8U,则会产生错误的结果,例如16U32F

我正在考虑使用switch的一些方法,并且每个模板都要使用一个案例:

Mat m = (Mat_<uchar>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
switch (m.depth()) //8U
{
    case 0:
        m.at<uchar>(1, 2) = 12;
        break;
    case 4:
        m.at<int>(1, 2) = 12;
        break;
    //...
}

这个问题还有其他可能性吗?我经常关注性能,因为图像的所有像素都会被修改。

0 个答案:

没有答案