OpenCV - 无法访问Mat中的所有像素

时间:2013-08-05 17:28:42

标签: ios opencv mat

我正在尝试手动更改垫子中的每个像素 为简单起见,假设我想将每个像素着色为黑色。我使用以下方法:

for (int i = 0; i < imageToWorkWith.rows; i++) {
    for (int j = 0; j < imageToWorkWith.cols; j++) {
        imageToWorkWith.at<cv::Vec3b>(i,j) = cv::Vec3b(0,0,0);
    }
}

从逻辑上讲,它似乎应该覆盖垫子中的每个像素,因为它会读取所有可能的行/列组合。
不幸的是,这不起作用。对于每个图像,我都缺少一列“大块”。例如,在加载此图像时:
enter image description here
结果是:
enter image description here
无论我使用什么图像,我丢失的这个“块”都是相同的大小。我似乎无法理解其原因。我知道“at”函数的row / col顺序是(row,col),但我尝试将它们切换为踢,结果当然更糟。

我在这里错过了什么?循环遍历所有行/列不够?

1 个答案:

答案 0 :(得分:0)

只需使用Vec4b代替Vec3b,因为默认情况下图像在ios中有4个通道。结果将是全白的。

for (int i = 0; i < imageToWorkWith.rows; i++) {
    for (int j = 0; j < imageToWorkWith.cols; j++) {
        imageToWorkWith.at<cv::Vec4b>(i,j) = cv::Vec4b(0,0,0);
    }
}