我正在尝试为项目使用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;
}
}
}
}
我该如何修复?
使用nullptr
而不是0用于Mat mask
编辑:
使用Mat::zeros(image.size(), image.type())
创建与image
相同大小和键入的空垫。
使用Mat::ones(image.size(), image.type())
创建一个将所有值传递通过
我会将功能更改为与指针一起使用图像:
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
,而添加了检查是否存在的检查。这样,该函数可随附有或没有给定掩码。如果没有掩模,则将处理整个图像。