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内置函数bin() oct()等实现进制转换
Dec 30 Python
从零学Python之入门(四)运算
May 27 Python
Python处理Excel文件实例代码
Jun 20 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
对python制作自己的数据集实例讲解
Dec 12 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
Django 实现对已存在的model进行更改
Mar 28 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
Python中过滤字符串列表的方法
Dec 22 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 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
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
Django 反向生成url实例详解
2019/07/30 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
C#怎么让一个窗口居中显示?
2015/10/20 面试题
在C#中如何实现多态
2014/07/02 面试题
教师对学生的评语
2014/04/28 职场文书
2014年教师节活动总结
2014/08/29 职场文书
四风自我剖析材料
2014/09/30 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
停发工资证明范本
2015/06/12 职场文书
创业计划书之餐饮
2019/09/02 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python