1

したがって、私の問題は比較的単純なものですが、それでも私のような Python 初心者にとっては非常に難しいものです。したがって、基本的に、入力画像には、正方形などの小さな三角形の束のような多くの形状があります。画像内から外側の正方形と各三角形を抽出する必要があります。これを行うための単純なテンプレート マッチング コードを開発しましたが、うまくいかないようです。

while ( len(numpy.where( b <150 )[0])!=xx):
xx=len(numpy.where( b <150 )[0])
for v in range(len(b)-len(a)):
    for w in range(len(b[0])-len(a[0])):
        c=b[v:v+len(a[0]),w:w+len(a)]
        c.flags.writeable=False
        #c=b.reshape(len(a),len(a))
        vv=sum(sum(c-a))
        #print v, w
        if(vv<minval):
            minval=vv
            xcor=v
            ycor=w

print xcor, ycor, minval
print len(numpy.where( b <150 )[0])
print b[xcor:xcor+len(a),ycor:ycor+len(a[0])]
for p in range(xcor,xcor+len(a)):
    for q in range(ycor,ycor+len(a[0])):
        b.setflags(write=True)
        b[p][q]=251;
#print b[xcor:xcor+len(a),ycor:ycor+len(a[0])]
xcorr=0
ycorr=0
minval=99999

問題は、単純な図形のセットだけを抽出する必要があることですが、私のコードは延々と続きます... また、TRIANGLES IN A BOX 問題の処理方法がわかりません。誰かが私を助けてくれますか?

抽出とは、オブジェクトが配置されている場所だけを見つけることを意味します...配置されている場合!

4

1 に答える 1

0

opencv を使用する場合は、次の手順で開始します。

import cv2

def show_image_and_wait_for_key( image, name="Image" ):
    print "showing",name,"(waiting for input)"
    cv2.imshow('norm',image)
    cv2.waitKey(0)

def draw_segments( image , segments, color=(255,0,0), line_width=1):
        '''draws segments on image'''
        for segment in segments:
            x,y,w,h= segment
            cv2.rectangle(image,(x,y),(x+w,y+h),color,line_width)

original= cv2.imread("ravens.jpg")
image=original
image= cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
image= cv2.GaussianBlur(image,(3,3),0)
_, image= cv2.threshold( image, 140, 255, cv2.THRESH_BINARY )
contours,hierarchy = cv2.findContours(image.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
segments= [cv2.boundingRect(c) for c in contours] 
draw_segments( original, segments )
show_image_and_wait_for_key( original )

この後、長方形の面積、位置、縦横比などでフィルタリングできます。次の関数を使用して、画像から領域を抽出できます。

def region_from_segment( image, segment ):
    '''given a segment (rectangle) and an image, returns it's corresponding subimage'''
    x,y,w,h= segment
    return image[y:y+h,x:x+w]

すべての画像も numpyndarrayであるため、cv2 インターフェイスに慣れている必要があります。

于 2012-11-08T05:38:45.573 に答える