使用.at()分配白色不起作用

时间:2016-05-28 13:40:22

标签: c++ opencv

我为未来的侵蚀实施编写了这个算法。我正在测试算法,但我遇到了这个问题:

当我尝试用白色为所有像素着色时,我得到一个带有黑色和白色列的图像,否则如果我将每个像素设置为黑色就可以了。我怎么解决?

这是我的代码

Mat Morph_op_manager::erode_img(Mat image) {

//stucture element attribute

int strel_rows = 5;
int strel_cols = 5;

// center structure element attribute
int cr = 3;
int cc = 3;

//number of columns/rows after strel center
int nrac = strel_rows - cr ;
int ncac = strel_cols - cr ;


int min_val = 255;



for (int i = cr-1 ; i <image.rows-nrac ; i++) {
    for (int j = cc-1; j < image.cols-ncac ; j++) {

        for (int ii = 0; ii <strel_rows ; ii++) {
            for (int jj = 0; jj <strel_cols ; jj++) {

                image.at<int>(i-(nrac-ii),j-(ncac-jj)) = 255;
           }
        }
    }
}

我在c ++中使用opencv,文件是黑白图像.tiff。这是我的output

1 个答案:

答案 0 :(得分:1)

我不知道您是如何宣布自己的image对象,但我敢打赌它属于CV_8U类型。

当您访问像素时,您应该写image.at<uchar>((i-(nrac-ii),j-(ncac-jj))而不是image.at<int>((i-(nrac-ii),j-(ncac-jj))。那是因为你声明矩阵中的数据是uchar(CV_8U)而不是int(CV_32S)。