python OpenCV学习笔记


Posted in Python onMarch 31, 2021

图像翻转

使用Python的一个包,imutils。使用下面的指令可以安装。

pip install imutils

imutils包的Github地址:https://github.com/jrosebr1/imutils

CSDN镜像:https://codechina.csdn.net/mirrors/jrosebr1/imutils

可以在上面这个地址里面学习更多的使用方式。

import cv2
import imutils

'''
imutils.rotate
第一个参数是翻转的图像,第二个参数的翻转角度
函数还提供翻转中心的设置,但默认就是中心翻转。
'''
vc = cv2.VideoCapture(0)

if vc.isOpened():
  flag, frame = vc.read()
  img = imutils.rotate(frame, 180)  # 图像翻转 
  cv2.imshow("frame", img)
else:
  flag = False

while flag:
  flag, frame = vc.read()
  if frame is None:
    break
  if flag is True:
    img = imutils.rotate(frame, 180)  # 图像翻转
    cv2.imshow("frame", img)
    if cv2.waitKey(10) == 27:
      break
vc.release()
cv2.destroyAllWindows()

这样写的话,最后的输出图像就是翻转180度的。

imutils包里还有其他好用的函数,resizing、4-point Perspective Transform、Sorting Contours等等。

图像轮廓排序

这个效果同样也是依靠imutils包完成。

from imutils import contours
import cv2
'''
contours.sort_contours
可选排序方式:"left-to-right", "right-to-left", "top-to-bottom", "bottom-to-top"
返回值为轮廓和外接矩形

contours.label_contour
contours包内自带的画轮廓的函数,可以直接用,然后可以在图片上标出轮廓序号
也可以直接使用cv2.drawContours直接画轮廓
'''
img = cv2.imread(r"D:\opencv-workspace\Opencv\test17--VScode\shapes.png")
draw_img = img.copy()
img_rect = img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.Canny(gray, 10, 20)  # Canny边缘检测
cnts, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # 获得轮廓
(cnts, boundingBoxes) = contours.sort_contours(cnts, "top-to-bottom")  # 对轮廓进行排序处理
for (i, c) in enumerate(cnts):
  sortedImage = contours.label_contour(draw_img, c, i, color=(240, 0, 159))
# img_out = cv2.drawContours(draw_img, cnts, -1, (240, 0, 159), 2)
# 根据boundingBoxes画外接矩形
for (x, y, w, h) in boundingBoxes:
  img_rect = cv2.rectangle(img_rect, (x, y), (x+w, y+h), (240, 0, 159), 2)
cv2.imshow("top-to-bottom", sortedImage)
cv2.imshow("rect", img_rect)
cv2.waitKey(0)
cv2.destroyAllWindows()

这样写的话,最后的输出图像就是翻转180度的。

imutils包里还有其他好用的函数,resizing、4-point Perspective Transform、Sorting Contours等等。

图像轮廓排序

这个效果同样也是依靠imutils包完成。

from imutils import contours
import cv2
'''
contours.sort_contours
可选排序方式:"left-to-right", "right-to-left", "top-to-bottom", "bottom-to-top"
返回值为轮廓和外接矩形

contours.label_contour
contours包内自带的画轮廓的函数,可以直接用,然后可以在图片上标出轮廓序号
也可以直接使用cv2.drawContours直接画轮廓
'''
img = cv2.imread(r"D:\opencv-workspace\Opencv\test17--VScode\shapes.png")
draw_img = img.copy()
img_rect = img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.Canny(gray, 10, 20)  # Canny边缘检测
cnts, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # 获得轮廓
(cnts, boundingBoxes) = contours.sort_contours(cnts, "top-to-bottom")  # 对轮廓进行排序处理
for (i, c) in enumerate(cnts):
  sortedImage = contours.label_contour(draw_img, c, i, color=(240, 0, 159))
# img_out = cv2.drawContours(draw_img, cnts, -1, (240, 0, 159), 2)
# 根据boundingBoxes画外接矩形
for (x, y, w, h) in boundingBoxes:
  img_rect = cv2.rectangle(img_rect, (x, y), (x+w, y+h), (240, 0, 159), 2)
cv2.imshow("top-to-bottom", sortedImage)
cv2.imshow("rect", img_rect)
cv2.waitKey(0)
cv2.destroyAllWindows()

python OpenCV学习笔记

颜色识别

基础颜色识别

颜色识别是在HSV空间内进行的,因此在使用之前先进行颜色空间的转换。

'''使用下面这个函数进行转换,第一个参数填写要转换的图片,第二个参数填写cv2.COLOR_BGR2HSV'''
cv2.cvtColor
import cv2
import numpy as np
'''
cv2.inRange
函数很简单,参数有三个
第一个参数:hsv指的是原图
第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0
第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0
而在lower_red~upper_red之间的值变成255
'''
# 阈值
lower_green = np.array([50, 255, 255])
upper_green = np.array([70, 255, 255])
img = cv2.imread(r"D:\opencv-workspace\Opencv\test16--VScode\photo.jpg")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask_green = cv2.inRange(img_hsv, lower_green, upper_green)
cv2.imshow("img_or", mask_green)
# 使用下面这个函数能显示原来的颜色。
res_green = cv2.bitwise_and(img, img, mask=mask_green)
cv2.imshow("img", res_green)
cv2.waitKey(0)
cv2.destroyAllWindows()

python OpenCV学习笔记

python OpenCV学习笔记

python OpenCV学习笔记

在进行颜色识别时,难免会出现“漏颜色”的现象,也就是会出现没识别全的现象。这个时候可以再对图像进行处理,比如说进行形态学处理,让图像更加饱满之类的。

根据BGR获取HSV

import cv2

color = np.uint8([[[193, 189, 147]]])  # 参数填写BGR的值
hsv = cv2.cvtColor(color, cv2.COLOR_BGR2HSV)
print(hsv)  # 打印出来的数值就是对应的HSV值

程序运行的结果是

[[[ 93 61 193]]]

这个就是对应的HSV的值。

根据之前写的颜色识别,就需要把对应的阈值写出。具体写法就是保持S和V不变,H加减10。这样的话就可以写出高低阈值然后应用到颜色识别里面就可以了。

阈值编辑器

import cv2
import numpy as np


def function(x):
  lowH = cv2.getTrackbarPos("lowH", "img_666")
  lowS = cv2.getTrackbarPos("lowS", "img_666")
  lowV = cv2.getTrackbarPos("lowV", "img_666")
  HighH = cv2.getTrackbarPos("HighH", "img_666")
  HighS = cv2.getTrackbarPos("HighS", "img_666")
  HighV = cv2.getTrackbarPos("HighV", "img_666")
  # print(lowH, lowS, lowV, HighH, HighS, HighV)
  lower = np.uint8([lowH, lowS, lowV])
  upper = np.uint8([HighH, HighS, HighV])
  mask = cv2.inRange(img_hsv, lower, upper)
  res = cv2.bitwise_and(img, img, mask=mask)
  cv2.imshow("img", res)


img = cv2.imread(r"D:\opencv-workspace\Opencv\test16--VScode\test.jpg")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.namedWindow("img_666")
cv2.createTrackbar("lowH", "img_666", 0, 179, function)
cv2.createTrackbar("lowS", "img_666", 0, 255, function)
cv2.createTrackbar("lowV", "img_666", 0, 255, function)
cv2.createTrackbar("HighH", "img_666", 0, 179, function)
cv2.createTrackbar("HighS", "img_666", 0, 255, function)
cv2.createTrackbar("HighV", "img_666", 0, 255, function)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

写了一个比较垃圾的阈值编辑器。。。就不多解释了。。

python OpenCV学习笔记

以上就是python OpenCV学习笔记的详细内容,更多关于python OpenCV的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python选择排序算法的实现代码
Nov 21 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
初学Python实用技巧两则
Aug 29 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
Nov 02 Python
Python MD5加密实例详解
Aug 02 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
python实现QQ邮箱/163邮箱的邮件发送
Jan 22 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
python基于OpenCV模板匹配识别图片中的数字
Python insert() / append() 用法 Leetcode实战演示
Mar 31 #Python
tensorflow学习笔记之tfrecord文件的生成与读取
Mar 31 #Python
Python中快速掌握Data Frame的常用操作
Mar 31 #Python
pycharm无法导入lxml的解决办法
python某漫画app逆向
python爬虫--selenium模块
Mar 31 #Python
You might like
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
浅谈$('div a') 与$('div>a')的区别
2016/07/18 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
详解python单元测试框架unittest
2018/07/02 Python
Python 函数返回值的示例代码
2019/03/11 Python
django celery redis使用具体实践
2019/04/08 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
明星邀请函
2015/02/02 职场文书
2016情人节宣传语
2015/07/14 职场文书
教师师德工作总结2015
2015/07/22 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
用python自动生成日历
2021/04/24 Python
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server