5

私はopencv pythonで輪郭を見つけて描く例に取り組んでいました。しかし、コードを実行すると、輪郭が描画されていない暗いウィンドウだけが表示されます。どこが間違っているのかわかりません。コードは次のとおりです。

import numpy as np
import cv2
im = cv2.imread('test.png')
imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy =     cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img=cv2.drawContours(image,contours,0,(0,255,0),3)
cv2.imshow('draw contours',img)
cv2.waitKey(0)

test.png黒い背景に白い四角形です。

どんな助けでも大歓迎です。

編集: Opencv 3.0.0 と Python 2.7 を使用しています

4

2 に答える 2

9

問題はdrawContoursコマンドにあると思います。現在書かれているように、画像の送信先は と の両方imageですimg。また、単一チャネルの 8 ビット イメージに色付きのボックスを描画しようとしています。findContoursさらに、この関数は輪郭を見つけるプロセスで実際に入力画像を変更することに注意してください。そのため、後のコードでその画像を使用しないことをお勧めします。

drawContoursまた、プログラムが現在アクセスできる唯一のコピーを上書きしないように、イメージをさらに分析する場合は、関数の宛先として設定する新しいイメージ コピーを作成することをお勧めします。

import numpy as np
import cv2

im = cv2.imread('test.png')
imCopy = im.copy()
imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy =  cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(imCopy,contours,-1,(0,255,0))
cv2.imshow('draw contours',imCopy)
cv2.waitKey(0)

これらの 2 つの簡単な修正は、白い背景を持つ黒い正方形の同様の画像で機能しました。

于 2015-07-19T01:02:01.220 に答える