18

opencv pythonを使用して画像の領域(ROI)を取得しようとしています。使用されるopencvのバージョンは2.4.3です。ただし、APIを呼び出そうとすると

cv2.SetImageROI

このエラーを返します

AttributeError: 'module' object has no attribute 'SetImageROI'

また、ドキュメントを確認すると、このAPIがレガシーPython関数であることが示唆されているようです。 http://docs.opencv.org/2.4.3/search.html?q=setimageroi

Pythonでこの現在のバージョンのopencvを使用してROIを取得する方法がわかりません。誰かがこれについてどうやって行くか提案してもらえますか?

ありがとう

4

3 に答える 3

38

さて、さらに分析すると、cv2はnumpy配列構造をサポートしているため、APIは不要になり、画像全体を配列自体で操作できることがわかりました。例えば:

img = cv2.imread('image.png')
img = img[c1:c1+25,r1:r1+25]

ここで、c1は左側の列のピクセル位置であり、r1は対応する行の位置です。そして、imgは、ROIとしてピクセル内で指定された画像を持っています。

編集:ここで非常にうまく説明されています、Pythonでopencvを使用して画像領域をコピーする方法は?

于 2013-03-15T06:32:34.770 に答える
18

これは、画像からROIを選択するための視覚化です

-------------------------------------------
|                                         | 
|    (x1, y1)      w                      |
|      ------------------------           |
|      |                      |           |
|      |                      |           | 
|      |         ROI          | h         |  
|      |                      |           |   
|      |                      |           |   
|      |                      |           |       
|      ------------------------           |   
|                           (x2, y2)      |    
|                                         |             
|                                         |             
|                                         |             
-------------------------------------------

画像(0,0)の左上隅を、左から右をx方向、上から下をy方向と見なします。(x1,y1)ROIの左上と右下の頂点がある場合(x2,y2)、Numpyスライスを使用して、次のように画像をトリミングできます。

ROI = image[y1:y2, x1:x2]

ただし、通常、右下の頂点はありません。通常の場合、等高線を反復処理するときにROIのバウンディングボックスの(x,y,w,h)座標が取得される可能性があります。cv2.boundingRect()

cnts = cv2.findContours(grayscale_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    ROI = image[y:y+h, x:x+w]

OpenCV v2.2以降、Numpy配列は画像の表示に素朴に使用されています。ROIを抽出するためのこのNumpyスライス方法は、古いバージョンでは機能しない可能性があります

于 2019-10-03T03:01:48.750 に答える
5

ドキュメントに記載されているように、また表示されるエラーメッセージに関しては、適切なモジュールをインポートしてから、SetImageROI()メソッドを呼び出す必要があります。

import cv
cv.SetImageROI(imag, rect)
于 2015-03-05T16:37:52.037 に答える