最近老師留了幾個作業,雖然用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