python开发之HighGUI上位机开发(二)( 二 )
综合实验1 - 单个窗口展示图像这里我们设计一个综合实验 ,组合之前所学到的知识 。
import numpy as npimport cv2# 导入一张图像 模式为彩色图片img = cv2.imread('lena1.jpg', cv2.IMREAD_COLOR)# 展示图像cv2.imshow('image',img)# 等待按键摁下 最多5s钟# 如果超时key_pressed 就会等于-1key_pressed = cv2.waitKey(5000)print("有按键摁下或者已超时")# 使用chr() print("Key Pressed : {}== {}".format(key_pressed, chr(key_pressed)))# 关闭所有窗口cv2.destroyAllWindows()# 或者是这样 ,销毁创建的单个窗口# cv2.destroyWindow('image')12345678910111213141516171819
当有按键按下时 , 会有准确的按键响应:
文章插图
超过5s没按下按键就会报如下错误:
文章插图
综合实验2 - 同时展示多个窗口我们读入lena的图片, 将其分别转换为IMREAD_COLOR 与 IMREAD_UNCHANGED
这里稍稍讲解一下IMREAD_UNCHANGED :我们普通的图片BGR格式, 每个像素点的取值是从0-255,用8bit的位去存储像素点的值. 而市面上大多数SLR 相机, 可以支持更高的颜色分辨率(颜色深度 , depth) ,可以使用16-bit来存储单个通道像素点的值(PNG图片或者TIFF图片)
同时将三者通过窗口展示:
import numpy as npimport cv2# 导入一张图像 模式为彩色图片 cv2.IMREAD_COLOR = 1img_color = cv2.imread('lena1.jpg', cv2.IMREAD_COLOR)# 导入一张图片 模式为灰度图 cv2.IMREAD_GRAYSCALE = 0img_gray = cv2.imread('lena1.jpg', cv2.IMREAD_GRAYSCALE)# 导入一张图片cv2.IMREAD_UNCHANGED = -1 包括 alpha透明度通道 img_alpha = cv2.imread('lena1.jpg', cv2.IMREAD_UNCHANGED)# 创建一个名字叫做 image_color 的窗口 窗口可拉伸cv2.namedWindow('image_color', cv2.WINDOW_NORMAL)# 在名字叫做 image_color 的窗口下展示图像 cv2.imshow('image_color',img_color)cv2.namedWindow('image_grayscale', cv2.WINDOW_NORMAL)cv2.imshow('image_grayscale', img_gray)cv2.namedWindow('image_alpha', cv2.WINDOW_NORMAL)cv2.imshow('image_alpha', img_alpha)# 检测按下的按钮print("请按 按键 e (exit)键关闭窗口")while True:key_pressed = cv2.waitKey(100)if key_pressed >= 0:# 打印一下按键记录print("Key Pressed : {}== {}".format(key_pressed, chr(key_pressed)))# 匹配为e后 跳出 while循环if key_pressed == ord('e'):break# 关闭所有打开的窗口cv2.destroyAllWindows()123456789101112131415161718192021222324252627282930313233343536
展示效果:
文章插图
滑动条组件主要讲解trackar的api , 包括创建trackar , trackbar回调函数的使用 ,获取多个trackar的取值 。
创建滑动条首先我们需要创建一个Trackbar , 调用createTrackbar 这个函数
cv2.createTrackbar(trackbar_name,window_name,min_value,max_value,callback_func)1
依次传入的函数
- trackbar_name 滑条的名称 , 获取这个滑条的数值也是通过名称
- window_name 滑条所在窗口 (window) 的名称
- min_value 滑条最小值
- max_value 滑条最大值
- callback_func 回调函数 , 这个参数其实类似C语言中的函数指针 , 我传入的是函数名称 , 每次滑条被拖动的时候 , 都会执行这个函数.
# 这个nothing的意思就是啥也不做 。 def nothing(x):passcv2.createTrackbar('gray_value','image',0,255,nothing)1234
这里的nothing(x) , 被传入的x 实际上是滑条的当前取值 。你也可以改成这样 ,看一下x 的值 。
# 这个nothing的意思就是啥也不做 。 def nothing(x):print(x)cv2.createTrackbar('gray_value','image',0,255,nothing)1234
x 是我命名的值 ,你可以命名为任意名称 。Trackbar的使用实例可以见通过HighGUI的Trackbar制作可变色背景
设置滑动条的位置初始化滑动条的位置需要用到setTrackbarPos这个函数 。
cv2.setTrackbarPos('trackbar_name','window_name', value)1
依次传入Trackbar的名字 , Trackbar所在的窗口的名字 ,还有Trackbar的初始值 。使用样例
cv2.setTrackbarPos('gray_value','image' ,10)1
获取滑动条的位置除了在回调函数中获取Trackbar的取值 ,还可以通过getTrackbarPos 函数获取Trackbar的取值 。依次传入Trackbar的名字 , Trackbar所在的窗口的名字, 返回当前Trackbar的取值 。
value = http://kandian.youth.cn/index/cv2.getTrackbarPos('trackbar_name','window_name')1
使用样例gvalue = http://kandian.youth.cn/index/cv2.getTrackbarPos('gray_value','image')1
实例1-单个Trackbar单个Trackbar的使用样例:import cv2# 创建窗口cv2.namedWindow('image_win')value = http://kandian.youth.cn/index/Nonedef update(x):# 回调函数 更新value的值global valuevalue = xprint('Update Value, value =http://kandian.youth.cn/index/{}'.format(value))# 创建一个滑动条对象 数值名字叫做 value_name# 滑动条创建在 image_win 窗口之下# 取值范围为 0-255, 回调函数为updatecv2.createTrackbar('value_name','image_win',0,255,update)# 等待按键按下cv2.waitKey(0)# 销毁窗口cv2.destroyAllWindows()123456789101112131415161718192021
- 信息|澜湄合作机制开通水资源合作信息共享平台
- 黑莓(BB.US)盘前涨逾32%,将与亚马逊开发智能汽车数据平台|美股异动 | US
- 不负众望|12小时卖了30万部!Redmi Note9不负众望,卢伟冰开心了?
- 表达|重磅!2021世界安防博览会官方宣贯会正式召开,百余家企业表达参展意愿
- iPhone|折叠屏iPhone要来?曝苹果开始测试|OPPO Reno5真机曝光
- 承受|折叠屏iPhone已开始测试?要求能承受10万次折叠,或在2年后发布
- 报名啦!宿迁开展第五届“十大科技之星”评选
- 开发自|不妥协不追随 Member’s Mark升级背后的“山姆哲学”
- 正确|新昌消防丨听说,这才是微信新表情的正确打开方式
- 优化|微软亚洲研究院发布开源平台“群策 MARO” 用于多智能体资源调度优化