c++ - 更改零矩阵中的像素无法正常工作

标签 c++

我尝试对新的零矩阵进行循环并将每个像素更改为白色。

cv::Mat background = cv::Mat::zeros(frame.rows, frame.cols,frame.type());

for (int i=0; i<frame.rows; i++)
{
    for (int j=0; j<frame.cols; j++)
    {
        background.at<char>(i,j)=255;
    }
}

通常在最后我必须有一个全白的矩阵但我不明白为什么最后我有这张图片:

enter image description here

谢谢

编辑: 解决方案:

cv::Mat background = cv::Mat::zeros(frame.rows, frame.cols,frame.type());

for (int i=0; i<frame.rows; i++)
{
    for (int j=0; j<frame.cols; j++)
    {

         Vec3b bgrPixel = Vec3b(255,255,255);
         background.at<Vec3b>(i,j)=bgrPixel;

    //    background.at<char>(i,j)=255;


    }
}

谢谢!

最佳答案

您的矩阵由 i*j 个像素组成 - 每个像素由 3 (RGB) 或 4 (RGBA) 个字符(字节/ channel )组成。当您需要遍历 i*j 个像素时,您只遍历矩阵的前 i*j 个字节。我猜你传入的是什么类型,因为第三个参数是“像素类型”。

在这里查看示例用法:OpenCV get pixel channel value from Mat image

关于c++ - 更改零矩阵中的像素无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910522/

相关文章:

c++ - QDockWidget 选项卡位置

C++ SQL 查询/为 C++ 封装的 SQL?

c++ - Autoexp.dat 版本

c++ - 标准模板库列表 - 双向链接还是循环链接?

c++ - 我如何编译失败并显示 "'::main' 的 C++ 代码必须返回 'int'“?

c++ - char* 到 std::string

c++ 隐式复制构造函数是否复制数组成员变量?

c++ - 异常规范

python - Cython 中的 C++ 指针

c++ - 使用 GraphViz 进行图形可视化