我尝试对新的零矩阵进行循环并将每个像素更改为白色。
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;
}
}
通常在最后我必须有一个全白的矩阵但我不明白为什么最后我有这张图片:
谢谢
编辑: 解决方案:
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 个字节。我猜你传入的是什么类型,因为第三个参数是“像素类型”。
关于c++ - 更改零矩阵中的像素无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910522/