做的网站 如何在局域网内访问,网站建设成功案例宣传,仲恺建设局网站,网站换网址了怎么找目录
1 创建和显示窗口... - 4 -
2 加载显示图片... - 6 -
3 保存图片... - 7 -
4 视频采集... - 8 -
5视频录制... - 11 -
6 控制鼠标... - 12 -
7 TrackBar 控件... - 14 -
8.RGB和BGR颜色空间... - 16 -
9.HSV和HSL和YUV.. - 17 -
10 颜色空间的转化... - 18 -
… 目录
1 创建和显示窗口... - 4 -
2 加载显示图片... - 6 -
3 保存图片... - 7 -
4 视频采集... - 8 -
5视频录制... - 11 -
6 控制鼠标... - 12 -
7 TrackBar 控件... - 14 -
8.RGB和BGR颜色空间... - 16 -
9.HSV和HSL和YUV.. - 17 -
10 颜色空间的转化... - 18 -
11 mat的深浅拷贝... - 19 -
12 颜色通道的分离与合并... - 20 -
13 画直线... - 22 -
14 绘制矩形和圆... - 23 -
15 绘制椭圆... - 24 -
16 绘制多边形和填充多边形... - 25 -
17 绘制文本及中文文本... - 26 -
18 作业:根据需要画图... - 28 -
19 图像运算之加减乘除... - 30 -
20 图片的融合... - 32 -
21 Opencv的位运算... - 33 -
22 resize() 用法... - 35 -
23 图片上加Logo(完美贴合) - 36 -
24 图像的翻转与旋转... - 39 -
25 仿射变换之平移... - 40 -
26 仿射变换之获取变换矩阵... - 42 -
27 仿射变换之透视变换... - 44 -
28 卷积操作... - 45 -
29 均值滤波和方盒滤波... - 48 -
30 高斯滤波... - 49 -
31 中值滤波... - 50 -
32 双边滤波... - 51 -
33 索贝尔(sobel) 算子... - 52 -
34 scharr算子... - 53 -
35 拉普拉斯算子... - 54 -
36 形态学... - 55 -
37 Canny边缘检测... - 56 -
38 全局二值化... - 57 -
39 自适应阈值二值化... - 58 -
40 腐蚀操作... - 59 -
41 获取形态学卷积核... - 60 -
42 膨胀操作... - 61 -
43 开运算... - 62 -
44 闭运算... - 63 -
45 形态学梯度... - 64 -
46 顶帽操作... - 65 -
47 黑帽操作... - 66 -
48 查找轮廓... - 67 -
49 绘制轮廓... - 68 -
50 计算轮廓面积和周长... - 69 -
51 多边形逼近... - 71 -
52 凸包... - 72 -
53 最小外接矩形和最大外接矩形... - 74 -
54 高斯金字塔... - 76 -
55 拉普拉斯金字塔... - 78 -
56 图形直方图介绍... - 78 -
57 使用Opencv统计直方图... - 79 -
58绘制直方图... - 79 -
59用掩膜的直方图... - 80 -
60图均衡化... - 82 -
61 车辆统计项目(一)... - 83 -
71 特征检测基本概念... - 89 -
72 harris 角点检测数学原理1. - 90 -
73 Harris角点检测数学原理2. - 90 -
74 harris 角点检测应用... - 90 -
75 sift算法原理... - 91 -
76 sift算法使用... - 91 -
77 shi-tomasi 角点检测... - 91 - 1 创建和显示窗口
namedWindow() 创建命名窗口imshow() 显示窗口destroyAllwindws() 摧毁窗口resizeWindow() 改变窗口大小waitKey() 等待用户输入import cv2
# 创建窗口之前不要调整窗口大小
cv2.namedWindow('window', cv2.WINDOW_NORMAL) # 创建窗口
cv2.resizeWindow('window', 600, 800) # 调整窗口大小
# 显示图像
image = cv2.imread('path_to_image')
cv2.imshow('window', image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
确保在调用 cv2.resizeWindow 之前窗口已经创建,并且在窗口存在的情况下调整其大小。
ord()计算ASCII数值import cv2#创建窗口# WINDOW_NORMAL 可以让窗口大小变得可调节,默认WINDOW_AUTOSIZE 自动大小cv2.namedWindow('new',cv2.WINDOW_NORMAL) cv2.resizeWindow('new',600,800)# 展示名字为window的窗口cv2.imshow('window',0) #没有内容只好写0cv2.resizeWindow('window',600,800)# 等待按键输入;0表示接收任意按键,如果给其他整数,表示等待按键的时间,单位毫秒;可以利用waitKey()实现关闭窗口key = cv2.waitKey(0) #key 为键盘输入的ASCII码if key 0xFF == ord('q'): print('准备销毁窗口') cv2.destroyAllWindows() # 销毁所有窗口2 加载显示图片
imread(path,flag):使用imread可以读取图片,默认读取的是彩色图片。Matplotlib显示的图片和实际不一样,因为opencv读取的颜色通道是按照BGR排列的,一般照片是RGB,为了显示正常要用opencv的显示方法:
如果常用显示图片可以封装成函数,以后可以使用(自己所有的功能都可以封装起来,以后导入就可以直接用,方便积累)
import cv2# 显示图片def cv_show(name,img): cv2.imshow('name',img) cv2.waitKey(0) cv2.destroyAllWindows() import cv2import monkeyimport matplotlib.pyplot as pltimport numpy as np# 读取图片img = cv2.imread('2.jpg')# 显示图片monkey.cv_show('侯文广',img) monkey.music_play()
3 保存图片
imwrite(path,img):使用imwrite保存图片
“./123.png” # 当前目录下的图片。
import cv2 cv2.namedWindow('img',cv2.WINDOW_NORMAL) #创建一个窗口cv2.resizeWindow('img',320,240) #设置窗口尺寸img = cv2.imread('./2.jpg') # 载入当前目录下的图片#利用while 循环优化退出逻辑while True: cv2.imshow('img',img) key = cv2.waitKey(0) #接收键盘的输入字母的ASCII码 if(key0xff==ord('q')): break elif(key0xff==ord('s')): cv2.imwrite(r'D:/5.png',img) print('保存成功') break else: print(key) breakcv2.destroyAllWindows()
4 视频采集
视频是由图片组成的,视频的每一帧就是一幅图片,一般是30帧。
cv2.VideoCapture可以捕获摄像头,用数字来表示不同的设备,比如0,1
如果是视频文件直接指定路径即可。 读取视频
import cv2# 创建窗口cv2.namedWindow('video',cv2.WINDOW_NORMAL) cv2.resizeWindow('video',640,380)# 打开视频文件vc = cv2.VideoCapture('./nine.mp4')# 循环读取摄像头每一帧while True: # 读每一帧数据,返回标记和这一帧数据frame,True表示读到了数据,False表示没读到数据 ret,frame = vc.read() # ret表示标记,frame表示图片 # 可以根据ret做个判断 if not ret: # 没有读到数据 break # 显示窗口 cv2.imshow('video',frame) # 退出条件 key = cv2.waitKey(1) if key == ord('q'): break# 别忘了释放资源vc.release() cv2.destroyAllWindows() 读取摄像头
import cv2# 创建窗口cv2.namedWindow('video',cv2.WINDOW_NORMAL)cv2.resizeWindow('video',640,380)# 打开摄像头vc1 = cv2.VideoCapture(0)# 循环读取摄像头每一帧while True: # 读每一帧数据,返回标记和这一帧数据frame,True表示读到了数据,False表示没读到数据 ret,frame = vc1.read() # ret表示标记,frame表示图片 # 可以根据ret做个判断 if not ret: # 没有读到数据 break # 显示窗口 cv2.imshow('video',frame) # 退出条件 key = cv2.waitKey(1000//30) #每帧图片之间的间隔时间ms(30帧,每帧之间隔多久) if key ==ord('q'): break# 别忘了释放资源vc1.release() cv2.destroyAllWindows() 5视频录制
VideoWriter:参数一为输出文件,参数二为多媒体文件格式(VideoWriter.fourcc),参数三为帧率,参数四为分辨率。write 编码并写入缓存release 缓存内容写入磁盘,并释放资源import cv2 cap = cv2.VideoCapture(0) # 打开摄像头# *mp4v就是解包操作,等同于'm','p','4','v'fourcc = cv2.VideoWriter.fourcc(*'mp4v')# (640,480)表示摄像头拍视频,这个大小搞错了不行# 主要是分辨率vw = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))while cap.isOpened(): ret, frame = cap.read() if not ret: print('can not receive framne ,Exiting ....') break vw.write(frame) cv2.imshow('frame', frame) if cv2.waitKey(1) == ord('q'): break6 控制鼠标
Opencv允许对窗口上的鼠标进行操作
setMouseCallback(winname,callback,userdata),winname是窗口的名字,callback是回调函数,userdata是给回调函数的参数,callback(event,x,y,flags,userdata)回调函数包含这5个参数,event是事件(鼠标移动,左键,右键),x,y是点鼠标的坐标点,flags主要用于组合键,userdata是上面setMouseCallback的userdata鼠标事件:
EVENT_MOUSEMOVE 0 鼠标移动EVENT_LBUTTONDOWN 1 按下鼠标左键EVENT_RBUTTONDOWN 2 按下鼠标右键EVENT_MBUTTONDOWN 3 按下鼠标中键EVENT_LBUTTONUP 4 左键释放EVENT_RBUTTONUP 5 右键释放EVENT_MBUTTONUP 6中键释放EVENT_LBUTTONDBLCLK 7 左键双击EVENT_RBUTTONDBLCLK 8 右键双击EVENT_MBUTTONDBLCLK 9 中键双击EVENT_MOUSEWHEEL 10鼠标滚轮上下滚动EVENT_MOUSEHWHEEL 11鼠标左右滚动Flags:
EVENT_FLAG_LBUTTON 1 按下左键EVENT_FLAG_RBUTTON 2 按下右键EVENT_FLAG_MBUTTON 4 按下中键EVENT_FLAG_CRTLKEY 8 按下CTRL键EVENT_FLAG_SHIFTKEY 16 按下SHIFTKEY键EVENT_FLAG_ALTKEY 32 按下ALT键import cv2import numpy as np# 函数名可以随便取,但是必须5个参数def mouse_callback(event,x,y,flags,userdata): # 内容根据具体作用进行更换(鼠标在窗口操作会触发函数) print(event,x,y,flags,userdata) # 根据event或者flags的值来定义函数 # 按下鼠标右键退出 if event == 2: cv2.destroyAllWindows()# 创建窗口cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)# 窗口是宽度(列)高度(行)cv2.resizeWindow('mouse',640,360)# 设置鼠标回调函数# userdata是'123'cv2.setMouseCallback('mouse',mouse_callback,'123')# 生成全黑图片# 先行(高)后列(宽)img = np.zeros((360,640,3),np.uint8)while True: cv2.imshow('mouse',img) key = cv2.waitKey(1000//30) if key 0xff == ord('q'): breakcv2.destroyAllWindows()7 TrackBar 控件
可以拖动的控件。
表示拖动了多少值。最多三原色控制
createTrackbar(trackbarname,winname,value,count,onChange)创建TrackBar控件,value为trackbar的默认值,count为bar的最大值,trackbar的名字,窗口的名字。回调函数(trackbar动了会触发的结果)
getTrackbarPos(trackbarname,winname)获取TrackBar当前值。import cv2import numpy as np# 创建窗口cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL) cv2.resizeWindow('trackbar',640,360)# 定义回调函数# 触发def callback(value): if value = 50: print(value)# 创建trackbarcv2.createTrackbar('R','trackbar',0,255,callback) cv2.createTrackbar('G','trackbar',0,255,callback) cv2.createTrackbar('B','trackbar',0,255,callback)# 创建一个背景图片img = np.zeros((360,640,3),np.uint8)while True: # 获取当前trackBar的值 r = cv2.getTrackbarPos('R','trackbar') g = cv2.getTrackbarPos('G', 'trackbar') b = cv2.getTrackbarPos('B', 'trackbar') # 改变背景图颜色(bgr顺序) img[:] = [b,g,r] cv2.imshow('trackbar',img) key = cv2.waitKey(1000//30) if key ==ord('q'): breakcv2.destroyAllWindows() 8.RGB和BGR颜色空间
Opencv默认使用BGR排列顺序
9.HSV和HSL和YUV
Opencv采用最多HSV色彩空间
Hue:色相取值0—360°,从红色开始逆时针方向计算,红色为0°,绿色120°,蓝色240°。
Saturation:饱和度取值0—100%,饱和度高颜色越饱和,光谱色越多。越低越浅色。
Value(brightness):明度,光亮程度,0%黑,100%白 HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。HSV色系对用户来说是一种直观的颜色模型,对于颜色,人们直观的会问”什么颜色?深浅如何?明暗如何?“,而HSV色系则直观的表示了这些信息。
每一种颜色都是由色相(Hue,简H),饱和度(Saturation,简S)和色明度(Value,简V)所表示的。这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。
色调H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,取值范围为0°~360°。若从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;
饱和度S:取值范围为0.0~1.0;
亮度V:取值范围为0.0(黑色)~1.0(白色)。
10 颜色空间的转化
cvtColor(img,colorspace):颜色转化关键APIimport cv2def callback(value): # 鼠标不同操作value不同值 print(value) cv2.namedWindow('color',cv2.WINDOW_NORMAL) cv2.resizeWindow('color',640,480) img = cv2.imread('2.jpg')# 常见颜色空间转换colorspaces = [cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA,cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV,cv2.COLOR_BGR2YUV]# trackbarcv2.createTrackbar('curcolor','color',0,4,callback)while True: # 获得trackbar上的值 index = cv2.getTrackbarPos('curcolor','color') # 颜色空间转化API cvt_img = cv2.cvtColor(img,colorspaces[index]) cv2.imshow('color',cvt_img) key = cv2.waitKey(1000//30) if key 0XFF == ord('q'): breakcv2.destroyAllWindows()11 mat的深浅拷贝
Mat是Opencv在C++语言中用来表示图像数据的一种数据结构,在python中转化为numpy的ndarray。
MAT 数据结构 由header和data组成。Header中记录了图片的维数,大小,数据类型等数据。Ndarray的四种常见属性:data(数据存放的地址),size(元素总个数),dtype(数据类型),shape(形状)
Mat 共享数据Header 不同,data相同。
Mat的深浅拷贝就是对ndarry的深浅拷贝。
import cv2import numpy as np img = cv2.imread('2.jpg')