我正在尝试为项目使用http://moegelmose.com/p10/的源代码。我是opencv的新手,对C ++知之甚少。在构建时我收到以下错误,
could not convert '0' from 'int' to 'Mat {aka cv::Mat}'
void hueAdd(Mat image, int value, Mat mask = 0, int upperBound = 180);
第20行的代码是,
void hueAdd(Mat image, int value, Mat mask = 0, int upperBound = 180);
函数调用如下;
void hueAdd(Mat image, int value, Mat mask, int upperBound) {
assert(image.type() == CV_8UC1);
assert(mask.type() == CV_8UC1);
for(int i = 0; i < image.rows; i++) {
for(int j = 0; j < image.cols; j++) {
if(mask.at<uchar>(i,j) == 0) {
continue;
}
int result = (int)image.at<uchar>(i, j) + value; // Typecasting to make sure negative results can be saved.
if(result > upperBound) {
image.at<uchar>(i, j) = result-upperBound;
} else if(result < 0) {
image.at<uchar>(i, j) = upperBound+result;
} else {
image.at<uchar>(i, j) = result;
}
}
}
}
我该如何解决?
答案 0 :(得分:-1)
nullptr
Mat mask
代替0
修改强>
使用Mat::zeros(image.size(), image.type())
创建与image
相同尺寸和类型的空垫。
使用Mat::ones(image.size(), image.type())
创建一个掩码,通过
答案 1 :(得分:-1)
我会更改函数以使用指向图像的指针:
void hueAdd(Mat* image, int value, Mat* mask = NULL, int upperBound = 180);
该函数的代码如下所示:
void hueAdd(Mat* image, int value, Mat* mask, int upperBound)
{
assert(image);
assert(image->type() == CV_8UC1);
assert(mask->type() == CV_8UC1);
for(int i = 0; i < image->rows; i++) {
for(int j = 0; j < image->cols; j++) {
if(mask && mask->at<uchar>(i,j) == 0) {
continue;
}
[...]
编辑:
我删除了掩码的assert
,而是检查掩码是否存在。这样,该功能可以使用和不使用给定的掩码。
如果没有给出掩码,则整个图像得到处理。