【问题标题】:Python - Displaying the image with the original colorsPython - 以原始颜色显示图像
【发布时间】:2017-09-06 23:18:31
【问题描述】:

this question 的回答中,我想以原始颜色显示图像,因此从这行代码中删除了gray 参数:

plt.imshow(im_out, 'gray')

但是,当我这样做时,我得到的图像显示为黄色和紫色,而不是图像的原始颜色。

我应该怎么做才能以原始颜色显示图像?

谢谢。

EDIT 1我遇到了this tutorial,看来我应该使用:

plt.imshow(cv2.cvtColor(im_out, cv2.COLOR_BGR2RGB))

但是,当我这样做时,我得到了以下信息:

Calculated scale difference: 0.99
Calculated rotation difference: 44.51
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /home/user/opencv/modules/imgproc/src/color.cpp, line 10606
Traceback (most recent call last):
  File "align_surf.py", line 47, in <module>
    deskew()
  File "align_surf.py", line 9, in deskew
    plt.imshow(cv2.cvtColor(im_out, cv2.COLOR_BGR2RGB))
cv2.error: /home/user/opencv/modules/imgproc/src/color.cpp:10606: error: (-215) scn == 3 || scn == 4 in function cvtColor

我该如何解决这个问题?

EDIT 2上面的原因是在原代码中图片被读取如下:

orig_image = cv2.imread('1.jpg', 0)

所以,我只是删除了0

【问题讨论】:

  • 文档中并不清楚,但根据 c++ 文档,删除 0 大概默认为 '1':docs.opencv.org/2.4/modules/highgui/doc/…
  • 另外,plt.imshow(img, 'gray') 指示 matplotlib 使用 gray 颜色图显示图像 img;即暗示img 是灰度图像。否则,在“彩色”图像上指定颜色图是没有意义的。

标签: python matplotlib surf


【解决方案1】:

基于this tutorial,为了解决这个问题,我不得不将BGR转换为RGB,如下:

plt.imshow(cv2.cvtColor(im_out, cv2.COLOR_BGR2RGB))

【讨论】:

  • 这与您问题中的错误行有何不同? (或者最后一次编辑是为了作为答案?)顺便说一句,请注意opencv也有它自己的imshow函数,你可以使用它来代替matplotlib的,它可以绕过这个问题。 (或者同样,pyplot 有一个 imread 函数可以用来代替 opencv 的)
猜你喜欢
  • 2013-09-12
  • 2023-03-09
  • 2017-06-06
  • 2010-11-28
  • 1970-01-01
  • 2015-05-11
  • 2018-07-15
  • 1970-01-01
  • 2012-10-02
相关资源
最近更新 更多