OpenCV 基础操作简介
表中的内容
- 图片介绍
- 安装
- 输入
- 读取图像
- 读取视频
- 访问网络摄像头
- 将图像转换为灰度、模糊、hsv
- 边缘检测
- 图像膨胀、侵蚀
- 裁剪并调整大小
- 在图像上绘制形状
- 在图像上放置文字
- 扭曲透视
- 加入图像
图像简介
图片来自 qgis.org
像素 是图像的最小单位。它结合了形成图像、视频、文本或我们在计算机显示器上可见的任何内容。
安装
pip install opencv-python
输入
import cv2
cv2.__version__
opencv-python 包中的 cv2.imshow() 函数与 Jupyter/Colab notebook 不兼容。因此,请改用以下函数:
from google.colab.patches import cv2_imshow
cv2_imshow(img)
读取图像
# import image in img variable
img = cv2.imread('lambo.jpeg')
显示图像
cv2.imshow('Output', img)
cv2.waitKey(0)
如果你不使用waitKey() 函数,那么图像将立即消失,你在屏幕上将看不到任何内容。
在图像消失之前waitKey(x)增加了 x毫秒的延迟。在键盘按下一个键时,它返回该键的 ASCII 值。如果在 x 毫秒过去之前没有按下任何按钮,则返回 -1。waitKey(0) 无限期地等待按下按键。
读取视频
cap = cv2.VideoCapture(VIDEO PATH)
while True:
success, img = cap.read()
cv2.imshow('Output', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
变量“ cap ”存储视频。“img”将在每次迭代时从视频中获取下一帧
cv2.waitKey(1) & 0xFF==ord(‘q’)这一行表示 当用户从键盘按下’q’时,我们的视频就会停止。
Colab/Jupyter notebook 将显示视频中的图像序列。
访问网络摄像头
cap = cv2.VideoCapture(0) # id for default webcam = 0
cap.set(3, 640) # width=640, id=3 for width
cap.set(4, 480) # height=480, id=4 for height
cap.set(10, 100) # brightness=100, id=10 for brightness
while True:
success, img = cap.read()
cv2.imshow('Output', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
Google Colab 是一个云平台,它无法访问你本地系统的网络摄像头,因此上面的代码不会在其上运行。如果你正在使用 Google Colab,请查看此处的链接。
Converting an image into grayscale
将图像转变为灰度
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
使图像模糊
imgBlur = cv2.GaussianBlur(imgGray, (7, 7), 0)
将图像转换为 HSV 图像
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
边缘检测器:在图像中查找边缘
imgCanny = cv2.Canny(img, 100, 100)
Dialation:增加边缘的厚度
kernel = np.ones((5,5), np.uint8)
imgDialation = cv2.dilate(imgCanny, kernel, iterations=1)
侵蚀:减少边缘的厚度
kernel = np.ones((5, 5), np.uint8)
imgEroded = cv2.erode(imgDialation, kernel, iterations=1)
调整大小和裁剪
缩小尺寸:
imgResize = cv2.resize(img, (300, 200))
增加尺寸:
imgResize = cv2.resize(img, (800, 200))
裁剪:
imgCropped = img[0:200, 200:500]
在图像上绘制正方形
img = np.zeros((512, 512, 3), np.uint8)
img[:] = 255, 0, 0
img[200:300, 200:300] = 0,255,0
在图像上画线
cv2.line(图像、起点、终点、颜色、粗细)
img = np.zeros((256, 256, 3), np.uint8)
cv2.line(img, (0,0), (100,200), (0,0,255), 3)
在图像上绘制矩形
cv2.rectangle(图像、起点、终点、颜色、填充矩形或不)
img = np.zeros((256, 256, 3), np.uint8)
cv2.rectangle(img, (0,0), (200, 150), (0,255,0), cv2.FILLED)
在图像上画圆圈
cv2.circle(图像、中心、半径、颜色、厚度)
img = np.zeros((256, 256, 3), np.uint8)
cv2.circle(img, (100, 150), 30, (11, 12, 122), 2)
在图像上写文字
cv2.putText(图像、文本、起点、字体样式、比例、颜色、粗细)
img = np.zeros((256, 256, 3), np.uint8)
cv2.putText(img, 'OPENCV', (30,100), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 1)
扭曲透视:获取图像的鸟瞰图
透视变换 用于正确对齐图像。参见图片示例:
import numpy as np
import cv2
img = cv2.imread(IMAGE PATH)
width, height = 250, 350
pts1 = np.float32([[111,219],[287,188],[154,482],[352,440]])
pts2 = np.float32([[0,0],[width,0],[0,height],[width, height]])
matrix = cv2.getPerspectiveTransform(pts1, pts2)
imgOutput = cv2.warpPerspective(img, matrix, (width, height))
cv2.imshow('img', img)
cv2.imshow('Result', imgOutput)
cv2.waitKey(0)
加入图像
import numpy as np
import cv2
img = cv2.imread(IMAGE PATH)
imgHor = np.hstack((img, img))
imgVer = np.vstack((img, img))
cv2.imshow('Horizontal', imgHor)
cv2.imshow('Vertical', imgVer)
cv2.waitKey(0)
对于以上两种方法,图像的通道数应该相同,并且图像不能缩小或放大。
因此,请改用以下功能:

现在,使用上述函数连接图像:
import numpy as np
import cv2
img = cv2.imread(IMAGE PATH)
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgStack = stackImages(0.5, ([[img, img, img], [img, imgGray, img]]))
# Here, 0.5 is the scale. You can add the scale of your choice
cv2.imshow('Horizontal', imgStack)
cv2.waitKey(0)
以上是opencv的一些基本功能。要了解更多信息,请参阅此处的 opencv 官方文档。
感谢阅读
原文作者 Khushijain
原文链接 https://medium.com/analytics-vidhya/introduction-to-opencv-586e38d536fd