09滚动条操作

Callback回调基本流程

引用举例:你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。 (链接:https://www.zhihu.com/question/19801131)

先注册后使用

事件响应函数

typedef void(* cv::TrackbarCallback) (int pos//滑块位置, void *userdata//用户数据,可不写)

•完成事件响应函数的声明与实现

•def trackbar_callback (pos):

print(pos)

创建窗口函数

cv.namedWindow(winname [, flags]) -> None

•参数: winname表示窗口标题

•参数flags支持的flag有:

​ WINDOW_NORMAL – 可以调整窗口大小,图片很大时使用

​ WINDOW_AUTOSIZE – 根据图像大小自动适应,不可调

​ WINDOW_KEEPRATIO – 可以保持比例窗口,调整大小

调整图像亮度

•RGB值表示亮度

•RGB(0, 0,0) 黑色 -> RGB(255,255,255)白色,通过调整像素值来调整亮度

•add函数支持图像+图像与图像+常量方式

•subtract函数支持图像+图像与图像+常量方式

•动态调整,基于滚动条修改常量值,实现动态修改图像亮度并刷新显示

•创建图像窗口

•创建滚动条组件

•在窗口显示图像

•拖拉滚动条修改图像亮度

10键盘响应操作

键盘响应事件

•cv.waitKey( [, delay] ) ->retval

​ delay如果没有声明或者delay=0,表示一直阻塞

​ delay大于0,表示阻塞指定毫秒数

​ Retval返回的对应键盘键值,注意:在不同的操作系统中可能会有差异

​ 典型的retval = 27是ESC按键

响应不同的键盘操作

•检查返回键值,根据不同键值完成不同操作

•推荐使用if-elif-else, switch-case方式python3.10支持

if :

elif :

elif :

else:

•按ESC推出

•按1显示HSV图像

•按2显示YCrCb

•按3显示RGB图像

•按0恢复原图BGR显示

11自带颜色表操作

查找表(LUT,look up table)

优势:预计算,空间换时间,避免重复计算,节约计算时间

Gamma校正

•公式p(x, y)表示输入图像像素值

•像素值取值范围在0~255之间,每一个值对应一个输出值,这样映射关系,可以先建立查找表LUT

•根据输入得像素值作为index,在LUT中直接映射读取得到gamma校正之后得值

•对256x256大小的图像,计算量对比:

•不应用找表计算gamma - 65536次,

•应用查找表计算gamma – 256次

OpenCV中LUT支持

•cv.applyColorMap(src, colormap[, dst]) ->dst

•第一个参数输入图像

•第二个参数是颜色表

•dst返回图像

系统查找表使用cv.applyColorMap,自定义查找表使用cv.LUT

自定义colormap大小必须为256x1

12通道分离与合并

通道分类与合并

RGB/HSV彩色通道分离为单独通道

针对不同通道使用不同阈值提取mask

分离函数

•通道分离函数cv.split(m[, mv]) ->mv

•m表示输入图像,必须是多通道图像

•mv表示输出分离的单通道数组

合并与混合

•cv.merge(mv[, dst])->dst

​ mv表示各个通道

•cv.mixChannels(src, dst, fromTo)->dst

​ src表示输入多通道图像

​ fromTo表示通道索引

​ dst表示返回结果

通道阈值

•cv.inRange( src, lowerb, upperb[, dst]) -> dst

转为二值图

•其中src是输入图像

•Lowerb是低值

•Upperb是高值

•dst = (lowerb < src < upperb)

范围内的为1(白色),范围外的为0(黑色)