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中装饰器的用法
Apr 27 Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 Python
python中关于for循环的碎碎念
Jun 30 Python
深入浅出学习python装饰器
Sep 29 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
详解python之协程gevent模块
Jun 14 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
python3制作捧腹网段子页爬虫
2017/02/12 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
深入浅析Python传值与传址
2018/07/10 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
单位同意报考证明
2015/06/17 职场文书
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技