Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x OpenCV和Matplotlib以不同的方式显示图像_Python 3.x_Opencv_Matplotlib_Opencv3.0 - Fatal编程技术网

Python 3.x OpenCV和Matplotlib以不同的方式显示图像

Python 3.x OpenCV和Matplotlib以不同的方式显示图像,python-3.x,opencv,matplotlib,opencv3.0,Python 3.x,Opencv,Matplotlib,Opencv3.0,经过一些处理后,我正试图绘制一幅图像。我使用下面的三个选项获得三个不同的图像。在道路车道图像上应用Sobel滤波器两次后获得图像 下面的Python代码显示了三种绘图方法 img = cv2.imread('sample_image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gaussian = cv2.GaussianBlur(gray,(3,3),0) sobely = cv2.Sobel(ga

经过一些处理后,我正试图绘制一幅图像。我使用下面的三个选项获得三个不同的图像。在道路车道图像上应用Sobel滤波器两次后获得图像

下面的Python代码显示了三种绘图方法

    img = cv2.imread('sample_image.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    gaussian = cv2.GaussianBlur(gray,(3,3),0)

    sobely = cv2.Sobel(gaussian,cv2.CV_64F,1,0,ksize=5)  # y
    sobelyy = cv2.Sobel(sobely,cv2.CV_64F,1,0,ksize=5)  # y

    # method 1
    cv2.imshow('sobelyy', sobelyy) 

    # method 2
    cv2.imwrite('filtered_img1.JPG', sobelyy)
    s_img = cv2.imread('filtered_img1.JPG')
    cv2.imshow('s_img', s_img)

    # method 3
    plt.figure()
    plt.imshow(sobelyy, cmap='gray')
    plt.title('Filtered sobelyy image, B(x,y)'), plt.xticks([]), plt.yticks([])
    plt.show()

我得到的图像是:

我想得到的图像是在方法3中得到的

为什么图像以不同的方式显示? 如何像方法3的结果那样保存输出图像

提前谢谢你

为什么图像以不同的方式显示

OpenCV和Matplotlib使用不同的颜色空间来显示图像-这就是为什么即使它们实际上是相同的,它们看起来也不同

至于你的前两个方法,它们看起来应该是一样的,当我尝试你的代码时,它们是一样的

如何像方法3的结果那样保存输出图像

Matplotlib有一个内置函数,可将打印图像写入光盘,只需使用:

plt.savefig('your_filename.png')

请提供一份完整的文件,即复制所述行为所需的全部代码和图像。您正在处理
float
类型图像吗?我总结了代码,以便于复制。我正在处理uint8类型的图像。非常感谢。您的
sobely
sobelyy
float
,因为您在这里明确设置了:
cv2.Sobel(gaussian,cv2.CV_64F,1,0,ksize=5)
,在相应范围内有任何负值和正值。OpenCV的
imshow
imwrite
方法需要某些类型和范围,例如
uint8
和范围
[0…255]
中的值。Matplotlib的imshow
imshow
能够适当缩放任何范围。这是使用OpenCV和Matplotlib时常见的错误源。缩放sobelyy并适当设置其类型,使用OpenCV也可以获得所需的结果。