python - 无法在 matplotlib 中显示正常图像,它一直使用 jet colormap 显示

标签 python opencv matplotlib rgb colormap

我有显示图像的 MISER 区域的代码:

import numpy as np
import cv2
import sys
import matplotlib.pyplot as plt

imp1 = sys.argv[1]
img1 = cv2.imread(imp1)

mser = cv2.MSER()
gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
vis = img1.copy()

regions = mser.detect(gray, None)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions]
cv2.polylines(vis, hulls, 1, (0, 255, 0))

def plot_stuff(img1, img1_name, img2, img2_name):
    fig,axes = plt.subplots(1,2,figsize=(15,6))


    axes[0].imshow(img1, cmap='Greys_r')
    axes[0].set_title(img1_name)


    axes[1].imshow(img2)
    axes[1].set_title(img2_name)

    fig.suptitle("All Images")
    plt.show()

plot_stuff(img1, 'Original', vis, 'MISER Regions')

它工作正常,除了它是蓝色的:

enter image description here 这就是我被困的地方。因为无论我做什么,我都无法将图像显示为灰色,将 MISER 线显示为绿色。它不断返回射流:

enter image description here

即使我只显示图像,它仍然会返回 jet。为什么没有 RGB 颜色图?更好的是,为什么必须有一个颜色图,为什么它不能只显示正常图像?

最佳答案

您的数据存储为 64 位 numpy 数组,来自 docs ,

For RGB and RGBA images, matplotlib supports float32 and uint8 data types

您要么需要这种格式,要么需要指定颜色图。似乎另一个问题是“cv2.polylines”返回图像,这意味着您不能分别设置线条和背景的颜色。一个解决方案是使用相同大小的空白透明图像绘制 mser (MISER!?) 曲线,然后将它们绘制在同一轴上,

import numpy as np
import cv2
import sys
import matplotlib.pyplot as plt

imp1 = sys.argv[1]
img1 = cv2.imread(imp1)

mser = cv2.MSER()
gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
vis = np.zeros([img1.shape[0],img1.shape[1],4]) 

regions = mser.detect(gray, None)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions]
cv2.polylines(vis, hulls, 1, (0, 255, 0))
vis = np.array(vis, dtype=np.uint8)

#Copy green channel data to (alpha) transparent channel
vis[:,:,3] = vis[:,:,1]

def plot_stuff(img1, img1_name, img2, img2_name):
    fig,axes = plt.subplots(1,2,figsize=(15,6))

    print(img1.shape)
    axes[0].imshow(np.sum(img1,2), cmap='Greys_r')
    axes[0].set_title(img1_name)

    axes[1].imshow(np.sum(img1,2), cmap='Greys_r')
    axes[1].imshow(img2)
    axes[1].set_title(img2_name)

    fig.suptitle("All Images")
    plt.show()

plot_stuff(img1, 'Original', vis, 'MISER Regions')

这对我来说是返回, enter image description here

使用 matplotlib.version 1.4.3' 和 cv2.version'$Rev: 4557 $'

关于python - 无法在 matplotlib 中显示正常图像,它一直使用 jet colormap 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38288624/

相关文章:

python - 如何通过人脸检测得到准确的人数?

python - scikit-learn/python 中带有字符的随机森林

具有积分函数的python拟合曲线

c++ - 如何在样本中使用opencv的calibration.cpp(ubuntu opencv 2.4.12)

python - 使用 matplotlib 将多个 Dataframe 写入同一个 PDF 文件

python - matplotlib热图反转数据?

python - Matplotlib 和 Pyplot.close() 不释放内存? - 后端相关的 Qt4Agg

python - 监控和重启python脚本的最佳方法

python - 在 scrapy 的 start_requests() 中返回项目