构建时OPENCV流量信号识别错误



我正在尝试为项目使用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,而添加了检查是否存在的检查。这样,该函数可随附有或没有给定掩码。如果没有掩模,则将处理整个图像。

最新更新