python+opencv学习

1. 把所有绿色通道值变为0

import cv2
import numpy as np

img=cv2.imread('2.jpg')
#读取图片
img[:,:,1]=0
#绿色通道变为0
cv2.imshow('图片',img)
#显示图片
cv2.waitKey(0)
#无限地显示窗口

 python+opencv学习_第1张图片python+opencv学习_第2张图片

 人生建议,一定要买书来学习呀,不是说教程不好,而是书真的相对来说更系统。

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)

python+opencv学习_第3张图片

 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()

python+opencv学习_第4张图片

 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)

 实践证明:不转灰度图也是可以的。

 

你可能感兴趣的:(opencv,人工智能,计算机视觉)