1. 把所有绿色通道值变为0
import cv2
import numpy as np
img=cv2.imread('2.jpg')
#读取图片
img[:,:,1]=0
#绿色通道变为0
cv2.imshow('图片',img)
#显示图片
cv2.waitKey(0)
#无限地显示窗口
人生建议,一定要买书来学习呀,不是说教程不好,而是书真的相对来说更系统。
2.实现图片的局部截取并覆盖其他区域
import cv2
import numpy as np
img=cv2.imread('4.jpg')
my_roi=img[0:200,0:100]
img[300:500,300:400]=my_roi
cv2.imshow('pic',img)
cv2.waitKey(0)
3.图片的基本信息
import cv2
import numpy as np
img=cv2.imread('4.jpg')
print(img.shape)#宽,高,通道数
print(img.size)#像素大小
print(img.dtype)#datatype:图像的数据类型
输出:
(750, 500, 3)
1125000
uint8
1125000=750*500*3(字节)
4.实时显示摄像头,如果点击窗口或按下键盘,窗口关闭
import cv2
clicked=False
def onMouse(event,x,y,flags,param):
global clicked
if event == cv2.EVENT_LBUTTONUP:
clicked = True
#鼠标左键松开,clicked变为true
cameraCapture =cv2.VideoCapture(0)
#参数为0,表示打开笔记本的内置摄像头
cv2.namedWindow('MyWindow')
#给窗口命名
cv2.setMouseCallback('MyWindow',onMouse)
#设置鼠标回调
print('Showing camera feed. Click window or press any key to stop')
success,frame=cameraCapture.read()
#按帧读取数据
#读取成功,没有按下键,没有鼠标左键松开,同时满足三个条件,可以继续读取帧
while success and cv2.waitKey(1)==-1 and not clicked:
cv2.imshow('MyWindow',frame)
success,frame =cameraCapture.read()
cv2.destroyWindow('MyWindow')
cameraCapture.release()
5.读取视频帧并显示
Python-OpenCV读取视频文件_python opencv 读取视频_Scarlett2025的博客-CSDN博客
import cv2
cap = cv2.VideoCapture('02.mp4') # 创建一个视频获取对象
while True:
ret,frame=cap.read()
if not ret:
break
cv2.imshow('video',frame)
if(cv2.waitKey(50)==27):
break
按下Esc键,退出。
6.读取视频帧,显示,同时可以把帧写入新视频中,这里把mp4格式的视频帧提取出来,转存到avi格式的视频中。
学习自:
Opencv-Python捕获视频帧,显示和保存它的流_python 保存视频流_Scarlett2025的博客-CSDN博客
import cv2
cap = cv2.VideoCapture('02.mp4') # 创建一个视频获取对象
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
cap.set(cv2.CAP_PROP_POS_FRAMES, 100)
#从第100帧开始提取
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
# 获取视频帧的高
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
# 获取视频帧的帧率
fps = cap.get(cv2.CAP_PROP_FPS)
# 获取视频流的总帧数
fcount = cap.get(cv2.CAP_PROP_FRAME_COUNT)
print(w,h,fps,fcount)
#1280.0 720.0 25.0 271.0
#VideoWriter(filename, fourcc, fps, frameSize[, isColor]) ->
#文件路径,编码器,帧率,画面尺寸,画面是彩色还是黑白
writer = cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'), int(fps), (int(w), int(h)))
#xvid:MPEG-4编码类型,后缀为.avi
while cap.isOpened():
success,frame=cap.read()
while success:
cv2.imshow("try",frame)
success,frame=cap.read()
writer.write(frame)
if(cv2.waitKey(20) & 0xff ==ord('q')):
break
#&oxFF是一种防止异常的机制
#ord():从给定字符串中获取数字值
if(success ==False):
break
cap.release()
writer.release()
cv2.destroyAllWindows()
7.矩阵翻转
numpy中矩阵的翻转(flip)_numpy矩阵翻转_patrickpdx的博客-CSDN博客
import cv2
import numpy
a=numpy.random.randint(1,9,size=9).reshape((3,3))
print(a)
print(numpy.flip(a,axis=0))#上下翻转
print(numpy.flip(a,axis=1))#左右翻转
[[3 5 2]
[5 3 5]
[5 1 8]]
[[5 1 8]
[5 3 5]
[3 5 2]]
[[2 5 3]
[5 3 5]
[8 1 5]]
python:np.fliplr()_fliplr python_蹦跶的小羊羔的博客-CSDN博客
import numpy as np
array=np.arange(8).reshape((2,2,2))
print("Original array : \n",array)
print("Flipped array left-right:\n",np.fliplr(array))
Original array :
[[[0 1]
[2 3]][[4 5]
[6 7]]]
Flipped array left-right:
[[[2 3]
[0 1]][[6 7]
[4 5]]]2行2列,4个元素,每个元素是二元组
比如:
A B
C D变为:
B A
D C
利用 numpy.fliplr()实现图片的左右翻转
import numpy as np
import cv2
a=cv2.imread("xx.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow('pic1',a)
cv2.waitKey(0)
print("Original array : \n",a)
b=np.fliplr(a)
print("Flipped array left-right:\n",b)
cv2.imshow('pic',b)
cv2.waitKey(0)
实践证明:不转灰度图也是可以的。