我有显示图像的 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')
它工作正常,除了它是蓝色的:
这就是我被困的地方。因为无论我做什么,我都无法将图像显示为灰色,将 MISER 线显示为绿色。它不断返回射流:
即使我只显示图像,它仍然会返回 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')
使用 matplotlib.version 1.4.3' 和 cv2.version'$Rev: 4557 $'
关于python - 无法在 matplotlib 中显示正常图像,它一直使用 jet colormap 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38288624/