TShopping

 找回密碼
 註冊
搜索
查看: 1497|回復: 0
打印 上一主題 下一主題

[教學] Python-OpenCV 使用滑動條

[複製鏈接]
跳轉到指定樓層
1#
發表於 2021-4-26 19:42:19 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
函數createTrackbar:
cv2.createTrackbar(“scale”, “display”, 0, 100, self.opencv_calibration_node.on_scale)

功能:
綁定滑動條和窗口,定義滾動條的數值

參數
第一個參數時滑動條的名字,
第二個參數是滑動條被放置的窗口的名字,
第三個參數是滑動條默認值,
第四個參數時滑動條的最大值,
第五個參數時回調函數,每次滑動都會調用回調函數。
函數getTrackbarPos:
cv2.getTrackbarPos()

功能:
得到滑動條的數值

參數
第一個參數是滑動條名字,
第二個時所在窗口,
返回值是滑動條的數值。
函數setTrackbarPos:
cv2.setTrackbarPos('Alpha', 'image', 100)

功能:
設置滑動條的默認值

參數
第一個參數是滑動條名字,
第二個時所在窗口,
第三個參數是滑動條默認值,
舉例:
  1. import cv2
  2. import numpy as np
  3. alpha = 0.3
  4. beta = 80
  5. img_path = "2.jpg"
  6. img = cv2.imread(img_path)
  7. img2 = cv2.imread(img_path)
  8. def updateAlpha(x):
  9.     global alpha, img, img2
  10.     # 得到数值
  11.     alpha = cv2.getTrackbarPos('Alpha', 'image')
  12.     alpha = alpha * 0.01
  13.     img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
  14. def updateBeta(x):
  15.     global beta, img, img2
  16.     beta = cv2.getTrackbarPos('Beta', 'image')
  17.     img = np.uint8(np.clip((alpha * img2 + beta), 0, 255))
  18. # 创建窗口
  19. cv2.namedWindow('image')
  20. cv2.createTrackbar('Alpha', 'image', 0, 300, updateAlpha)
  21. cv2.createTrackbar('Beta', 'image', 0, 255, updateBeta)
  22. # 设置默认值
  23. cv2.setTrackbarPos('Alpha', 'image', 100)
  24. cv2.setTrackbarPos('Beta', 'image', 10)
  25. while (True):
  26.     cv2.imshow('image', img)
  27.     if cv2.waitKey(1) == ord('q'):
  28.         break
  29. cv2.destroyAllWindows()
複製代碼

效果


例子
  1. import cv2
  2. # 图像膨胀
  3. def img_dilated(d):
  4.     # 定义 kernel
  5.     kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (d, d))
  6.     # 图像膨胀
  7.     dilated = cv2.dilate(img, kernel)
  8.     cv2.imshow("myImg", dilated)
  9. img = cv2.imread('2.jpg')
  10. cv2.namedWindow('myImg')
  11. cv2.createTrackbar('d', 'myImg', 1, 30, img_dilated)
  12. while (1):
  13.     k = cv2.waitKey(1) & 0xFF
  14.     #按ESC键退出
  15.     if k == 27:
  16.         break
  17.     d = cv2.getTrackbarPos('d', 'myImg')
  18. cv2.destroyAllWindows()
複製代碼

效果


舉例(效果最好):
  1. import cv2
  2. import numpy as np
  3. # 图像膨胀函数
  4. def img_dilated(img,d):
  5.     # 定义 kernel
  6.     kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (d, d))
  7.     # 图像膨胀
  8.     dilated = cv2.dilate(img, kernel)
  9.     # 返回膨胀图片
  10.     return dilated
  11. # 回调函数,因为只能传一个参数,不方便,所以pass
  12. def nothing(pos):
  13.     pass
  14. #读取图片
  15. img = cv2.imread("2.jpg",1)
  16. # 创建老窗口
  17. cv2.namedWindow('OldImg')
  18. # 绑定老窗口和滑动条(滑动条的数值)
  19. cv2.createTrackbar('D', 'OldImg', 1, 30, nothing)
  20. while True:
  21.     # 提取滑动条的数值d
  22.     d = cv2.getTrackbarPos('D', 'OldImg')
  23.     # 滑动条数字传入函数img_dilated中,并且调用函数img_dilated
  24.     dilated = img_dilated(img, d)
  25.     # 绑定 img 和 dilated
  26.     result = np.hstack([img,dilated])
  27.     cv2.imshow('OldImg', result)
  28.     # 设置推出键
  29.     if cv2.waitKey(1) & 0xFF == ord('q'):
  30.         break
  31. # 关闭窗口
  32. cv2.destroyAllWindows()
複製代碼

效果:


可以比較新老圖片





 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-25 07:47 , Processed in 0.065978 second(s), 25 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表