2024-06-28 19:59:11 发布
网友
我有一个图像,我想从中提取一个区域。我有这个区域的左上角和右下角的坐标。我是这样做的:
I = cv2.imread("lena.png") I = cv2.cvtColor(I, cv2.COLOR_RGB2GRAY) region = I[248:280,245:288] tools.show_1_image_pylab(region)
我想不出怎么用彩色的。我想提取每个通道R,G,B;从每个通道中分割这个区域并将它们合并到一起,但是必须有一个更短的方法。
还有两个选项尚未提及:
img[..., ::-1] # same as the mentioned img[:, :, ::-1] but slightly shorter
以及多才多艺的
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
OpenCV和Matplotlib中的像素排序略有不同。
OpenCV遵循BGR顺序,而matplotlib可能遵循RGB顺序。
因此,当使用pylab函数显示OpenCV中加载的图像时,可能需要将其转换为RGB模式。(我不确定是否有简单的方法)。以下方法演示:
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('messi4.jpg') b,g,r = cv2.split(img) img2 = cv2.merge([r,g,b]) plt.subplot(121);plt.imshow(img) # expects distorted color plt.subplot(122);plt.imshow(img2) # expect true color plt.show() cv2.imshow('bgr image',img) # expects true color cv2.imshow('rgb image',img2) # expects distorted color cv2.waitKey(0) cv2.destroyAllWindows()
注意:请查看下面@Amro的评论,了解BGR和RGB之间更好的转换方法。img2 = img[:,:,::-1]。非常简单。
img2 = img[:,:,::-1]
运行此代码并亲自查看结果的差异。下面是我得到的:
使用Matplotlib:
使用OpenCV:
还有两个选项尚未提及:
以及多才多艺的
OpenCV和Matplotlib中的像素排序略有不同。
OpenCV遵循BGR顺序,而matplotlib可能遵循RGB顺序。
因此,当使用pylab函数显示OpenCV中加载的图像时,可能需要将其转换为RGB模式。(我不确定是否有简单的方法)。以下方法演示:
注意:请查看下面@Amro的评论,了解BGR和RGB之间更好的转换方法。
img2 = img[:,:,::-1]
。非常简单。运行此代码并亲自查看结果的差异。下面是我得到的:
使用Matplotlib:
使用OpenCV:
相关问题 更多 >
编程相关推荐