opencv入门级(Python)

通过anaconda安装opencv(我的anaconda5.2)
部分选自:https://blog.csdn.net/qq_38660394/article/details/80762011

1.图片显示

用 imread 显示图像

1
2
3
4
5
6
7
import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('watch.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

将img定义为cv2.read(image file, parms)。默认值是IMREAD_COLOR,这是没有任何 alpha 通道的颜色。alpha 是不透明度(与透明度相反)
你需要保留 Alpha 通道,也可以使用IMREAD_UNCHANGED。
你可以不使用IMREAD_COLOR …等,而是使用简单的数字。
第二个参数,可以使用-1,0或1。颜色为1,灰度为0,不变为-1。因此,对于灰度,可以执行cv2.imread(‘watch.jpg’, 0)。


一旦加载完成,我们使用cv2.imshow(title,image)来显示图像。从这里,我们使用cv2.waitKey(0)来等待,直到有任何按键被按下。一旦完成,我们使用cv2.destroyAllWindows()来关闭所有的东西。


用 Matplotlib 显示图像

1
2
3
4
5
6
7
8
import cv2
import numpy as np
from matplotlib
import pyplot as plt
img = cv2.imread('watch.jpg',cv2.IMREAD_GRAYSCALE)
plt.imshow(img, cmap = 'gray', interpolation='bicubic')plt.xticks([]), plt.yticks([])
# to hide tick values on X and Y
axisplt.plot([200,300,400],[100,200,300],'c',linewidth=5)plt.show()

绘制线条,就像任何其他 Matplotlib 图表一样,使用像素位置作为坐标的。
更方便: cv2.imwrite(‘watchgray.png’,img)

2.加载视频源

显示

1
2
3
4
5
6
7
8
9
10
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
breakcap.release()
cv2.destroyAllWindows()

cap = cv2.VideoCapture(0)。 这将从你计算机上的第一个网络摄像头返回视频。
frame是每个返回的帧。 如果没有帧,你不会得到错误,你会得到None。
gray,作为转换为灰度的帧。 注意这个BGR2GRAY。 需要注意的是,OpenCV 将颜色读取为 BGR(蓝绿色红色),但大多数计算机应用程序读取为 RGB(红绿蓝)。
尽管是视频流,我们仍然使用imshow。 在这里,我们展示了转换为灰色的源。 如果你想同时显示,你可以对原始帧和灰度执行imshow,将出现两个窗口。

录制

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
import cv2
cap = cv2.VideoCapture(1)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc,20.0(640,480))while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
out.write(frame)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
breakcap.release()
out.release()
cv2.destroyAllWindows()

在while循环中,我们使用out.write()来输出帧。

3.在图像上绘制和写字

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
import cv2
img=cv2.imread('watch.jpg',cv2.IMREAD_COLOR)
cv2.line(img,(0,0),(200,300),(255,255,255),50)
cv2.rectangle(img,(500,250),(1000,500),(0,0,255),15)
cv2.circle(img,(447,63), 63, (0,255,0), -1)
pts = np.array([[100,50],[200,300],[700,200],[500,100]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img, [pts], True, (0,255,255), 3)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV Tuts!',(10,500), font, 6, (200,255,155), 13, cv2.LINE_AA)
cv2.imshow('image',img)cv2.waitKey(0)cv2.destroyAllWindows()

cv2.line()接受以下参数:图片,开始坐标,结束坐标,颜色(bgr),线条粗细。
cv2.rectangle(img,(15,25),(200,150),(0,0,255),15)
这里的参数是图像,左上角坐标,右下角坐标,颜色和线条粗细。
cv2.circle(img,(100,63), 55, (0,255,0), -1)
这里的参数是图像/帧,圆心,半径,颜色和。 注意我们粗细为-1。 这意味着将填充对象,所以我们会得到一个圆。
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))cv2.polylines(img, [pts], True, (0,255,255), 3)
首先,我们将坐标数组称为pts(点的简称)。 然后,我们使用cv2.polylines来画线。 参数如下:绘制的对象,坐标,我们应该连接终止的和起始点,颜色和粗细。
font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img,’OpenCV Tuts!’,(0,130), font, 1, (200,255,155), 2, cv2.LINE_AA)
写字。

4.图像操作

引用特定像素,像这样:px = img[55,55]
修改像素:img[55,55] = [255,255,255]
引用:px = img[55,55] print(px)
引用 ROI,图像区域:px = img[100:150,100:150] print(px)
修改 ROI:img[100:150,100:150] = [255,255,255]
引用我们的图像的特定特征:print(img.shape) print(img.size) print(img.dtype)

5.图像算术和逻辑运算

add = cv2.add(img1,img2)
weighted = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)
addWeighted方法,参数是第一个图像,权重,第二个图像,权重,然后是伽马值,这是一个光的测量值。

6.颜色过滤

OpenCV 内置了将 BGR 转换为 HSV 的方法
dark_red = np.uint8([[[12,22,121]]]) dark_
red=cv2.cvtColor(dark_red,cv2.COLOR_BGR2HSV)