imread()载入的一张灰度图和cvtColor()转换后的一张灰度图不是一回事

问题遇到的现象和发生背景

我在进行霍夫直线检测学习时,最开始通过imread载入一张灰度图,后面在调用Canny(),在进行霍夫直线检测,最后通过for循环将每一根直线绘制出来,但是程序运行结果却是什么也没有绘制,直至我把imread那的第二个参数从IMREAD_GRAYSCALE改为IMREAD_COLOR(也就是默认值),程序运行结果才正常,想问问原因

问题相关代码,请勿粘贴截图
 void hough_linesp_demo()//统计概率霍夫线变换
{
    Mat src = imread("G:/CV/images/morph01.png", IMREAD_GRAYSCALE);
   //调用imread读入一张灰色图片(用于直线检测的图片)
    Mat binary; 
    Canny(src, binary, 80, 160, 3, false);
    namedWindow("binary", WINDOW_AUTOSIZE);
    imshow("binary", binary);

    vector<Vec4i>lines;
    HoughLinesP(binary, lines, 1, CV_PI / 180, 80, 200, 10);

    Mat result = Mat::zeros(src.size(), src.type());

    for (int i = 0; i < lines.size(); i++)
    {
        line(result, Point(lines[i][0], lines[i][1]),Point(lines[i][2],lines[i][3]), Scalar(0, 0, 255), 2, 8);
    }
    //利用for循环来绘制每一根直线,按照预期应该是正常显示,但是代码运行下什么都没绘制
    imshow("Hough_linesp", result);
    waitKey(0);
    destroyAllWindows();

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

我后面以为是canny要输入8bit的非单通道图像,但是我通过imread载入一张3通道8bit的默认图片,再用cvtColor(src,gray,BGR2GRAY),将其转为灰度图像,想测试一下我的猜想(按照我的猜想应该也是不能绘制的),但是运行结果打脸了,这顿操作后,程序正常运行

img

我想要达到的结果

求个解释,难道imread载入的灰度图和cvtColor()转换后的灰度图不是一回事吗,有什么区别

(1)如果只是 imread 载入灰度图与 cvtColor() 转换灰度图问题,跟 Hough 转换什么的都没有关系。你在程序开头,分别用这两种方法获取图像,显示出来比较一下就可以,也可以逐像素比较。一般来说,不会有很大差异,至少不会如你问题中的差异那么大。
(2)我猜想是在后面的处理过程中,src 被修改了。为此,你可以在 imread 载入灰度图程序中加一行,将 src 复制到另一变量:
gray = src.copy() # 这是 python 程序,请修改为 C
接下来使用最后一段程序 (即 cvtColor(src,gray,BGR2GRAY) 之后的程序),看看结果,你就明白了。

应该是一样的,载入的也是正常图片转出来的,不放心你可以image watch(vs插件,可以安装到vs)对比一下,可以像素对比,或者你两张图片直接相减看看差值。