画像があり、そこから領域を抽出したい。この領域の左上隅と右下隅の座標があります。グレースケールでは、このようにします:
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を抽出することを考えました。各チャネルからこの領域をスライスし、それらを結合して戻しますが、もっと短い方法があります。
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()
NB:BGRとRGB間の変換のより良い方法については、以下の@Amroのコメントを確認してください。img2 = img[:,:,::-1]
。非常に簡単です。
このコードを実行して、結果の違いを自分で確認してください。以下は私が得たものです:
Matplotlibを使用:
OpenCVを使用:
まだ言及されていない2つのオプション:
img[..., ::-1] # same as the mentioned img[:, :, ::-1] but slightly shorter
汎用性の高い
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)