import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('timg.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
程序 | 解释 |
---|---|
cv2.read(image file, parms) | 读取图片,对于第二个参数 ,颜色为1,灰度为0,不变为-1 |
cv2.imshow(title,image) | 显示图像 |
cv2.waitKey(0) | 等待,直到有任何按键被按下 |
cv2.destroyAllWindows() | 关闭所有窗口 |
(2)cv2读取,matplotlib显示并标注
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 axis
plt.plot([200,300,400],[100,200,300],'c', linewidth=5)
plt.show()
(1)读取网络摄像头视频并处理,显示
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
# 启动了一个无限循环(稍后将被break语句打破)
while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
# 按键q退出while循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
程序 | 解释 |
---|---|
cv2.VideoCapture(0) | 从计算机上的第一个网络摄像头返回视频,,参数也可设置为视频路径 |
cap.read() | ret是一个表示是否有返回的布尔值,frame是返回的帧, 如果没有帧,你不会得到错误,你会得到None |
cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | 转换帧为灰度,大多数计算机应用程序读取为 RGB,但OpenCV为 BGR |
cv2.imshow(‘frame’,gray) | 尽管是视频流,我们仍然使用imshow,因为frame原则上为图片 |
cap.release() | 释放网络摄像头 |
cv2.destroyAllWindows() | 关闭所有的imshow()窗口 |
(2)录制,并将录制内容保存到新文件中
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
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'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
程序 | 解释 |
---|---|
cv2.VideoWriter_fourcc(*‘XVID’) | XVID编码器 |
cv2.VideoWriter(‘output.avi’,fourcc, 20.0, (640,480)) | 解码器,定义保存文件名、编码器、帧率、视频宽高 |
out.write() | 利用解码器往文件output.avi输出帧 |
out.release() | 释放解码器 |
注:如果使用视频而不是网络摄像头作为源,则 cv2.VideoCapture()中的参数可以为视频指定文件路径,而不是摄像头号码
import numpy as np
import cv2
img = cv2.imread('timg.jpg',cv2.IMREAD_COLOR)
cv2.rectangle(img,(425,17),(870,492),(0,0,255),1)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
import cv2
img = cv2.imread('timg.jpg',cv2.IMREAD_COLOR)
cv2.rectangle(img,(425,17),(870,492),(0,0,255),1)
font = cv2.FONT_HERSHEY_SIMPLEX # 定义字体
cv2.putText(img,'captain Teemo',(425,50), font, 1, (0,0,255), 2, cv2.LINE_AA)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
程序 | 解释 |
---|---|
cv2.rectangle | 接受以下参数:图片,左上角坐标,右下角坐标,线条颜色(BGR),线条粗细,若粗细为-1将填充对象 |
cv2.putText | 在图像上写字, |
在图片或视频帧中每个像素都有一个坐标位置,每个像素都由颜色通道组成
import cv2
import numpy as np
img = cv2.imread('timg.jpg',cv2.IMREAD_COLOR)
# 引用特定像素
px = img[55,55]
# 修改像素值
img[55,55] = [255,255,255]
# 修改ROI(感兴趣区域)
img[100:150,100:150] = [255,255,255]
# 图像的属性
print(img.shape)
print(img.size)
print(img.dtype)
灰度图元素二值化,大于127赋值255,否则赋值0
import cv2
import numpy as np
img = cv2.imread('timg.jpg',0)
retval, threshold = cv2.threshold(img,127, 255, cv2.THRESH_BINARY)
#cv2.imshow('original',img)
cv2.imshow('threshold',threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()
改变图片大小
import cv2
import numpy as np
img = cv2.imread('timg.jpg')
# 先宽度后高度
new_img=cv2.resize(img,(224,224))
cv2.imshow('new',new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()