我有一张图片,想要从中提取一个区域。我有这个区域左上角和右下角的坐标。在灰度模式下,我可以这样做:
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;从每个通道中切割出此区域,然后将它们合并在一起,但肯定有更简单的方法。
我有一张图片,想要从中提取一个区域。我有这个区域左上角和右下角的坐标。在灰度模式下,我可以这样做:
I = cv2.imread("lena.png")
I = cv2.cvtColor(I, cv2.COLOR_RGB2GRAY)
region = I[248:280,245:288]
tools.show_1_image_pylab(region)
在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()
img2 = img[:,:,::-1]
。 - Amrocv2.COLOR_BGR2RGB
标志的cv2.cvtColor
函数。 - vahid abdicv2.imshow = lambda _, y: plt.imshow(y[:,:,::-1]).figure
- Hatshepsutimg2 = img[::,::-1]
- bluedroid还有两个选项尚未提到:
img[..., ::-1] # same as the mentioned img[:, :, ::-1] but slightly shorter
同时也非常多才多艺的
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img , cv2.COLOR_BGR2RGB)
参考链接:cvtColor
GetRectSubPix()
来获取区域,而不是切片。 - martineauregion.shape
并确保其格式为[rows,cols,3]
。 - Abid Rahman K