2017-03-06 5 views
0

画像上にオブジェクト(ここではPWB)を配置しようとしています。 まず、私は最大の輪郭を見つけることでこれを行います。それから私はこのオブジェクトだけを新しい画像に書き換えて、将来は小さな画像で作業できるようにしたいと思います。 しかし、このROIを書き直すと、元の画像より明るい画像になります。ROIが元の画像より明るい色で書かれています

CODE:私は10の評判を持っていないので

Original = cv2.imread(picture_location) 
image = cv2.imread(mask_location) 
img = cv2.medianBlur(image,29) 
imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
dst = cv2.bitwise_and(Original, image) 
roi = cv2.add(dst, Original) 
ret,thresh = cv2.threshold(imgray,127,255,0) 
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
area = 0 
max_x = 0 
max_y = 0 
min_x = Original.shape[1] 
min_y = Original.shape[0] 
for i in contours: 
    new_area = cv2.contourArea(i) 
    if new_area > area: 
     area = new_area 
     cnt = i 
x,y,w,h = cv2.boundingRect(cnt) 
min_x = min(x, min_x) 
min_y = min(y, min_y) 
max_x = max(x+w, max_x) 
max_y = max(y+h, max_y) 
roi = roi[min_y-10:max_y+10, min_x-10:max_x+10] 
Original = cv2.rectangle(Original,(x-10,y-10),(x+w+10,y+h+10),(0,255,0),2) 

#Writing down the images 
cv2.imwrite('Pictures/PCB1/LocatedPCB.jpg', roi) 
cv2.imwrite('Pictures/PCB1/LocatedPCBContour.jpg',Original) 

まだ私は絵を投稿することはできません。しかし私は、リンクを提供することができます: http://imgur.com/a/UY736 リージョンインタレスト http://imgur.com/a/UY736

オリジナルをメイン質問です私はとまったく同じ色でROIを書き留めるためのソフトウェアを得るのですか原画? 私はエレクトロメカニカルエンジニアですが、私はこれにかなり新しいです、私のコードを書いた方法についてのコメントは、可能であれば高く評価されるでしょう。

答えて

1

問題は、あなたが最初roi = cv2.add(dst, Original) を聞かせて、最終的にここで比較明画像からカットということである。

roi = roi[min_y-10:max_y+10, min_x-10:max_x+10] 

あなたは、元の画像をトリミングしたい場合は、あなたが行う必要があります。

roi = Original[min_y-10:max_y+10, min_x-10:max_x+10] 
0

あなたは画像をぼかした後にエッジ検出を実行する可能性があります。

Cannyエッジに最適なパラメータを選択する方法は? SEE HERE

lower = 46 
upper = 93 
edged = cv2.Canny(img, lower, upper) #--- Perform canny edge on the blurred image 

kernel = np.ones((5,5),np.uint8) 
dilate = cv2.morphologyEx(edged, cv2.MORPH_DILATE, kernel, 3) #---Morphological dilation 

_, contours , _= cv2.findContours(dilate, cv2.RETR_EXTERNAL, 1) #---Finds all parent contours, does not find child contours(i.e; does not consider contours within another contour) 

max = 0 
cc = 0 
for i in range(len(contours)): #---For loop for finding contour with maximum area 
    if (cv2.contourArea(contours[i]) > max): 
     max = cv2.contourArea(contours[i]) 
     cc = i 

cv2.drawContours(img, contours[cc], -1, (0,255,0), 2) #---Draw contour having the maximum area 
cv2.imshow(Contour of PCB.',img) 

enter image description here

x,y,w,h = cv2.boundingRect(cnt[cc]) #---Calibrates a straight rectangle for the contour of max. area 

enter image description here

crop_img = img1[y:y+h, x:x+w] #--- Cropping the ROI having the coordinates of the bounding rectangle 
cv2.imshow('cropped PCB.jpg',crop_img) 

enter image description here

関連する問題