opencv学习笔记01
原创博文地址:opencv学习笔记01
学习目标
1,opencv能做什么,不能做什么
2,阅读代码,知道某种func后图片怎么样了
3,在图片相关机器学习算法预处理阶段,希望通过对图片的简单处理,达到提升训练效果的目的。
OpenCV-Python教程:2.Images
https://www.jianshu.com/p/35712839830
·打开图片,显示,保存图片
·这些函数:cv2.imread(), cv2.imshow(), cv2.imwrite()
cv2.waitKey()是一个键盘绑定函数。它的参数是毫秒数,这个函数会等待任意键盘事件指定的毫秒时间。如果你点了任意键,这个程序继续。如果传入0,它会一直等待按键。它也可以设置成检测指定键,比如如果a被按了
cv2.destroyAllWindows()销毁所有的我们创建的窗口,如果你想销毁指定的窗口,使用函数cv2.destroyWindow()你可以传指定窗口的名字作为参数。
如果你使用64位的机器,你需要把k = cv2.waitKey(0) 这行换成:
1 2 3 4 5 |
k = cv2.waitKey(0) & 0xFF # 图集 imgs = np.hstack([img,img2]) # 展示多个 cv.imshow("mutil_pic", imgs) |
OpenCV-Python教程:3.视频
https://www.jianshu.com/p/562a936512ae
cap = cv2.VideoCapture(0)
cap.isOpened()
可以使用cap.get(propId)来访问这个视频的一些属性,propId是从0到18 的一个数。每个数字代表了视频的一个属性。
比如,我可以通过cap.get(3)和cap.get(4)来获得这一帧的宽度和高度。它默认会返回640x480,但是我想把值修改成320x240.只需要用ret = cap.set(3, 320)和ret = cap.set(4, 240)
1 2 3 4 |
fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480)) out.write(frame) out.release() |
OpenCV-Python教程:4.在OpenCV里的绘制函数
https://www.jianshu.com/p/b0adf093e15f
cv2.line(), cv2.circle(), cv2.rectangle(), cv2.ellipse(), cv2.putText()
这些函数里,你会发现一些通用的参数:
·img:你要画形状的图片
·color:形状的颜色。对于BGR,传一个元组进去,比如(255,0,0)是蓝色。 对于灰度图,传一个灰度值。
·thickness:线或者圆的粗细。如果传了-1给一个封闭图形比如圆,它会充满图形。默认的thickness = 1
·lineType: 线的类型,比如8-connected,反锯齿等。默认情况下是8-connected。cv2.LINE_AA是反锯齿,在曲线时很好看。
1 2 3 4 5 6 7 8 |
img = cv2.line(img,(0,0),(511,511),(255,0,0),5) img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3) img = cv2.circle(img,(447,63),63,(0,0,255),-1) img = cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1) pts = np.array([[10,5],[20,30],[70,20],[50,10]],np.int32) pts = pts.reshape((-1,1,2)) img = cv2.polylines(img,[pts],True,(0,255,255)) |
注意:
如果第三个参数是False,你会得到一个连接所有点的图形,而不是一个封闭图形。
cv2.polylines()可以被用来画多条线,值需要建一个包含所有线的列表,然后把它传给函数就行了。所有线都会被独立绘制。这比每条线都调用一次cv2.line()更快更好的方法。
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, ‘OpenCV’, (10,500), font, 4,(255,255,255), 2, cv2.CV_AA)
OpenCV-Python教程:5.鼠标作为画笔
https://www.jianshu.com/p/e261346db440
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
cv2.setMouseCallback('image',draw_circle) def draw_circle(event, x, y, flags, param): global ix, iy, drawing, mode if event == cv2.EVENT_LBUTTONDOWN: drawing = True ix,iy = x,y elif event == cv2.EVENT_MOUSEMOVE: if drawing == True: if mode == True: cv2.rectangle(img, (ix, iy), (x, y),(0,255,0),-1) else: cv2.circle(img,(x,y),5,(0,0,255),-1) elif event == cv2.EVENT_LBUTTONUP: drawing = False if mode == True: cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1) else: cv2.circle(img,(x,y),5,(0,0,255),-1) |
OpenCV-Python教程:7.图片上的基本操作
https://www.jianshu.com/p/80efbe3880dc
1 2 3 |
>>>b,g,r = cv2.split(img) >>>img=cv2.merge((b,g,r)) >>>b = img[:,:,0] |
假设你想把所有的红色像素变成0,你不用这么分割,你可以简单的使用Numpy索引,这样更快
1 |
>>>img[:,:,2]=0 |
cv2.split()是一个成本很高的操作(执行时间),所以只在必要的时候使用。Numpy索引要更有效率,能用就用。
OpenCV-Python教程:8.图片的算术运算
https://www.jianshu.com/p/4c4b4e651989
OpenCV和Numpy相加是不同的。OpenCV相加是一个渗透运算,而Numpy的相加是模运算。
1 2 3 4 5 6 7 8 |
>>>x = np.uint8([250]) >>>y = np.uint8([10]) >>>printcv2.add(x,y) ? ? ? # 250+10 = 260 => 255 [[255]] >>>print x+y ? ? ? ?# 250+10 = 260 % 256 = 4 [4] cv2.addWeighted() |
【Python——opencv篇】 bitwise_and、bitwise_not等图像基本运算及掩膜:https://blog.csdn.net/Lily_9/article/details/83143120
1 2 3 4 5 6 |
# set blue thresh lower_yellow=np.array([11,43,46]) hsv = cv.cvtColor(cp, cv.COLOR_BGR2HSV) mask = cv.inRange(hsv, lower_yellow, upper_yellow) cv.imshow('Mask', mask) res = cv.bitwise_and(cp, cp, mask=mask) |
OpenCV-Python教程:9.性能测量和改进技术
https://www.jianshu.com/p/205a7514641a
cv2.getTickCount 函数返回从一个参考时间(比如机器开机的时间)开始到这个函数被调用的时间之间的时钟循环数量。所以如果你在函数执行前调用一次,函数执行完调用一次,你就能得到函数执行用掉的时钟循环。
cv2.getTickFrequency函数返回时钟频率或者每秒钟的时钟循环数。所以要得到函数执行了多少秒
OpenCV的默认优化
很多OpenCV函数对SSE2, AVX等做了优化。当然也有未优化的代码。所以如果我们的系统支持这些特性,我们应该利用他们(基本上现在的主流处理器都支持)。在编译的时候是自动启用的。所以如果启用的话OpenCV执行的是优化的代码,你可以用cv2.useOptimized()来检查是否启用了,用cv2.setUseOptimized()来启用/禁用
Python标量运算时比Numpy标量运算要快的。所以对于包含1到两个元素的运算,Python标量要比Numpy数组要快。Numpy在数组尺寸有点大的时候占优势。
注意:
一般来说,OpenCV函数比Numpy函数要快,所以对于相同的运算,推荐优先使用OpenCV函数。但是,也有例外,特别是当Numpy操作views而不是复制的时候。
OpenCV-Python教程:10.更改颜色空间
https://www.jianshu.com/p/65c1fbd8ae2a、
了解下列函数:cv2.cvtColor(), cv2.inRange()
变更色彩空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# define range of blue color in HSV lower_blue = np.array([110,50,50]) upper_blue = np.array([130,255,255]) # Threshold the HSV image to get only blue colors mask = cv2.inRange(hsv,lower_blue,upper_blue) # Bitwise-AND mask and original image res = cv2.bitwise_and(frame,frame,mask=mask) >>>green = np.uint8([[[0,255,0]]]) >>>hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV) >>>print hsv_green [[[ 60 255 255]]] |
opencv学习笔记01相关推荐
- OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast
OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...
- OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope
OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...
- OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作
OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作 一.Write_XML_and_YAML_File(写入XML) #include <opencv2/opencv ...
- OpenCV学习笔记(三):图像对比度、亮度调整源码
OpenCV学习笔记(三):图像对比度.亮度调整源码 主函数: #include <opencv2/opencv.hpp>using namespace cv;using namespac ...
- openCVPracticalExercise学习笔记01
原创:openCVPracticalExercise学习笔记01 资料:OpenCV-Practical-Exercise:https://github.com/luohenyueji/OpenCV- ...
- opencv学习笔记02
原创博文地址:opencv学习笔记02 OpenCV-Python教程:11.图片阈值 https://www.jianshu.com/p/267a32ad0a23 cv2阈值处理:https://b ...
- 某人写的openCV学习笔记
原文地址:某人写的openCV学习笔记作者:拔剑 http://blog.csdn.net/thefutureisour 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释 之 ...
- 某人写的openCV学习笔记_拔剑-浆糊的传说_新浪博客
http://blog.csdn.net/thefutureisour 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释 之前看到过C版本的,感觉写的很长,没有仔细看,但是C ...
- opencv学习笔记(1) TermCriteria 和 光流法特征点
opencv学习笔记(1) 本系列文章由 @苏安6629 出品,转载请注明出处. TermCriteria类和calcOpticalFlowPyrLK的使用 在SLAM中,因为可能存在运动的目标,所以 ...
最新文章
- arthas命令整理:基础命令、jvm相关、class相关命令
- NewSQL数据库VoltDB特性简介
- 数字通信原理_光耦继电器在实际应用中的作用以及工作原理!
- Taro+react开发(28)本地用require线上不必
- python文件函数_python文件和文件夹复制函数
- Mysql 中 delete 与 left join 的问题
- Git:代码冲突常见解决方法
- 计算机速录学什么,学速录需要哪些能力
- vb 访问远程mysql_VB连接远程数据库
- pe linux系统安装教程视频教程,各种Veket安装方法及UD版PE+linux U盘制作
- 元宇宙8大创业方向:虚拟偶像、数字孪生…
- vue+canvas如何实现b站萌系登录界面
- 奇异问题之解决思路(一) npm run dev或npm run buil报错,单独运行scripts又正常?
- 牛客剪刀石头布Java 模拟+贪心
- Accumulation Degree -换根dp
- android手机桌面怎么调,安卓手机如何修改手机桌面上的CMCC
- DeepLinQ 用于隐私保护的数据共享的分布式多层分类账本
- 滴滴轮回--顺风车带有明显的性暗示
- 经验分享:个人网站如何备案?
- SEO(什么是seo,如何优化seo)