讀取圖檔
im = cv2.imread(self.imageFile)
建立 Selective Search 分割器
ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()
設定要進行分割的圖形
ss.setBaseImage(im)
使用快速模式(精準度較差)
ss.switchToSelectiveSearchFast()
使用精準模式(速度較慢)
ss.switchToSelectiveSearchQuality()
執行 Selective Search 分割
rects = ss.process()
self.DisplaySceneMarkInfo.insert(tk.END,'候選區域總數量: {}'.format(len(rects))+'\n')
#print('候選區域總數量: {}'.format(len(rects)))
numShowRects = 要顯示的候選區域數量
increment = 每次增加或減少顯示的候選區域數量
while True:
# 複製一份原始影像
imOut = im.copy()
#以迴圈處理每一個候選區域
for i, rect in enumerate(rects):
# 以方框標示候選區域
if (i < numShowRects):
x, y, w, h = rect
cv2.rectangle(imOut,
(x, y),
(x+w, y+h),
self.color_1,
int(self.linesizespinbox.get()),
self.fontlinetypecv2Var.get())
self.DisplaySceneMarkInfo.insert(
tk.END,
'(x, y, w, h) = ('+str(x)+','+str(y)+','+str(w)+','+str(h)+')\n')
else:
break
#顯示結果
cv2.imshow("Output,
press 'm' increase ,press 'l',decrease; 'q' quit",
imOut)
#讀取使用者所按下的鍵
k = cv2.waitKey(0) & 0xFF
#若按下 m 鍵,則增加 numShowRects
if k == 109:
numShowRects += increment
#若按下 l 鍵,則減少 numShowRects
elif k == 108 and numShowRects > increment:
numShowRects -= increment
#若按下 q 鍵,則離開
elif k == 113:
break
#關閉圖形顯示視窗
cv2.destroyAllWindows()