python+opencv實現閾值分割

最近老師留了幾個作業,雖然用opencv很簡單一句話就出來了,但是還沒用python寫過。在官方文檔中的tutorial中的threshold裏,看到可以創建兩個滑動條來選擇type和value,決定用python實現一下
注意python中的全局變量,用global聲明
開始出現了一些問題,因爲毀掉函數每次只能傳回一個值,所以每次只能更新value,後來就弄了兩個毀掉函數,這個時候,又出現了滑動其中一個,另一個的值就會變爲默認值的情況,這個時候猜想是全局變量的問題,根據猜想改動之後果然是。
感覺還有更簡單的方法,不需要設置兩個回調參數,對python不是很熟悉,時間有限,先不折騰了


python+opencv實現高斯平滑濾波
python+opencv實現霍夫變換檢測直線


(2016-5-10)到OpenCV-Python Tutorials’s documentation!可以下載


代碼

# -*- coding: utf-8 -*- 

import cv2

#兩個回調函數
def thresholdType(threshold_type):
    global THRESHOLD_TYPE 
    THRESHOLD_TYPE = threshold_type
    print threshold_TYPE, threshold_VALUE
    ret, dst = cv2.threshold(scr, THRESHOLD_VALUE, max_value, THRESHOLD_TYPE) 
    cv2.imshow(window_name,dst)

def thresholdValue(threshold_value):
    global THRESHOLD_VALUE
    THRESHOLD_VALUE = threshold_value
    print threshold_TYPE, threshold_VALUE
    ret, dst = cv2.threshold(scr, THRESHOLD_VALUE, max_value, THRESHOLD_TYPE) 
    cv2.imshow(window_name,dst)

#全局變量
"""
"Type: 
0: Binary 
1: Binary Inverted 
2: Truncate 
3: To Zero 
4: To Zero Inverted"
"""
THRESHOLD_VALUE = 0
THRESHOLD_TYPE = 3
max_value = 255
max_type = 4
max_BINARY_value = 255
window_name = "Threshold Demo"
trackbar_type = "Type"
trackbar_value = "Value"

#讀入圖片,模式爲灰度圖,創建窗口
scr = cv2.imread("G:\homework\SmallTarget.png",0)
cv2.namedWindow(window_name)

#創建滑動條
cv2.createTrackbar( trackbar_type, window_name, \
                    threshold_type, max_type, thresholdType)
cv2.createTrackbar( trackbar_value, window_name, \
                    threshold_value, max_value, thresholdValue )
#初始化
thresholdType(0)

if cv2.waitKey(0) == 27:  
    cv2.destroyAllWindows()

執行

import threshold
>>> reload(threshold)
0 0
2 0
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 10
1 12
1 13
1 16
1 18

最終效果圖

發佈了34 篇原創文章 · 獲贊 10 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章