我为未来的侵蚀实施编写了这个算法。我正在测试算法,但我遇到了这个问题:
当我尝试用白色为所有像素着色时,我得到一个带有黑色和白色列的图像,否则如果我将每个像素设置为黑色就可以了。我怎么解决?
这是我的代码
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
答案 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)。