Opencv显示图像全白吗?

时间:2018-08-01 11:22:06

标签: c++ opencv image-processing

我有这个功能:

int testImageAndGradients(int argc, char **argv) {
    if (argc != 2) {
        std::cout << "Need filename..." << std::endl;
        return 1;
    }

    Mat im = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);

    Mat imfloat, dx, dy;
    im.convertTo(imfloat, CV_32FC1);
    Mat u(imfloat.size(), imfloat.type());

    int & X = im.cols;
    int & Y = im.rows;

    Sobel(imfloat, dx, CV_32F, 1, 0, 3);
    Sobel(imfloat, dy, CV_32F, 0, 1, 3);

    Mat tmp, output(Size(3*X,Y),CV_8UC1);

    double minval, maxval;

    minMaxLoc(imfloat, &minval, &maxval);
    imfloat.convertTo(tmp, CV_8UC1, 255 / (maxval - minval), -minval);
    tmp.copyTo(output(Rect(0, 0, X, Y)));

    minMaxLoc(dx, &minval, &maxval);
    dx.convertTo(tmp, CV_8UC1, 255 / (maxval - minval), -minval);
    tmp.copyTo(output(Rect(X, 0, X, Y)));

    minMaxLoc(dy, &minval, &maxval);
    dy.convertTo(tmp, CV_8UC1, 255 / (maxval - minval), -minval);
    tmp.copyTo(output(Rect(2*X, 0, X, Y)));

    namedWindow("Img/Dx/Dy", WINDOW_AUTOSIZE);
    imshow("Img/Dx/Dy", output);
    waitKey(0);

    return 1;
}

其目的是可视化三个图像:原始图像,x渐变和y渐变。据我了解,调用convertTo应该使用最后两个参数执行规范化,但是我在示例中只能看到以下内容:

enter image description here

这不是我所期望的,我经常使用opencv遇到比例因子等问题(不幸的是,我经常需要在float和uchar之间进行转换)。

有人可以解释实际发生的情况,并且通常是解决规模问题的正确程序吗?

0 个答案:

没有答案