构建时OpenCV交通信号识别错误

时间:2015-05-18 19:15:16

标签: c++ opencv computer-vision

我正在尝试为项目使用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;
        }

    }
}
}

我该如何解决?

2 个答案:

答案 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,而是检查掩码是否存在。这样,该功能可以使用和不使用给定的掩码。 如果没有给出掩码,则整个图像得到处理。