想调用opencv中的inpaint函数。关于inpaintMask,我想通过遍历srcImage中的每一个像素,当这个像素的三个通道值皆为0时,将inpaintMask该位置像素值置非0。
可是遍历和赋值像素的时候,VS会报错,麻烦各位帮我看看问题所在,谢谢!代码附在了下面,很简单,不难看懂!
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/photo/photo.hpp>
#include <iostream>
using namespace cv;
using namespace std;
#define WINDOW_NAME1 "【原始图】"
#define WINDOW_NAME2 "【修补后】"
Mat srcImage1, inpaintMask;
int main(int argc, char ** argv)
{
Mat srcImage = imread("1.jpg");
if(!srcImage.data)
{
printf("读取照片错误,请确定目录下是否有imread函数指定的图片存在!\n");
return false;
}
srcImage1 = srcImage.clone();
inpaintMask = Mat::zeros(srcImage1.size(), CV_8UC1);
for(int u1 = 0; u1 < srcImage.rows; u1++)
for(int v1 = 0; v1 < srcImage.cols; v1++)
{
if(
srcImage.at<Vec3b>(u1,v1)[0] == 0 &&
srcImage.at<Vec3b>(u1,v1)[1] == 0 &&
srcImage.at<Vec3b>(u1,v1)[2] == 0 )
{
inpaintMask.at<Vec3b>(u1,v1)[0] = 255;
}
}
// 显示原图
imshow(WINDOW_NAME1, srcImage1);
Mat inpaintedImage;
inpaint(srcImage1, inpaintMask, inpaintedImage, 3, INPAINT_TELEA);
imshow(WINDOW_NAME2, inpaintedImage);
waitKey();
return 0;
}