python版本openCV学习笔记

目录

1、安装

1.1opencv-python

1. 2 安装openCV-contrib-python

2 读取、打印图像

2.1 读取打印操作

2.2 将图片读取为灰度图

3 读取、打印视频

3.1 读取一个视频文件

3.2 查看第一帧是否读取

3.3 读取每一帧并播放

4 常见图像操作

4.1 裁剪图像

4.2颜色通道提取

5 边界填充

5.1 replicate直接复制

5.2 reflect反射法

5.3 wrap外包装法

5.4 constant 常量法

6 数值计算


1、安装

1.1opencv-python

3.4.1.15版本后,很多算法被申请了专利,而且改动较多,建议安装3.4.1.15之前的版本

pip install opencv-python==3.4.0.14

安装完成后,在命令行中测试是否安装成功

python
import CV2
cv2.__version__

python版本openCV学习笔记_第1张图片

1. 2 安装openCV-contrib-python

pip install opencv-contrib-python==3.4.0.14

2 读取、打印图像

2.1 读取打印操作

读取一个图像文件,打出图像的像素矩阵

img = cv2.imread('data/cat.jpg')
print(img)

打印照片

cv2.imshow('cat', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 将图片读取为灰度图

img = cv2.imread('data/cat.jpg',cv2.IMREAD_GRAYSCALE)

3 读取、打印视频

3.1 读取一个视频文件

vc = cv2.VideoCapture('data/test.mp4')

3.2 查看第一帧是否读取

if vc.isOpened():
    open,vs = vc.read()
else:
    open = False

3.3 读取每一帧并播放

    while open:
        ret,frame = vc.read()
        if frame is None:
            break
        if ret == True:
            gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
            cv2.imshow('result',gray)
            # cv2.waitKey(10) 播放10秒
            # 0xFF == 27 任意键退出
            if cv2.waitKey(10) & 0xFF == 27:
                break

其中,每一帧的读取在此处,frame是读到一帧内容,ret表示是否读取成功

ret,frame = vc.read()

转换为灰度,frame此时就是一个图像,将它转换为灰度

gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

打印出这一帧

cv2.imshow('result',gray)

等待10ms,如果没有按下任何键就继续,如果按下ESC键就退出循环

if cv2.waitKey(10) & 0xFF == 27:
    break

4 常见图像操作

4.1 裁剪图像

img = cv2.imread('data/cat.jpg')
cat = img[0:50,0:200]

4.2颜色通道提取

b,g,r = cv2.split(img)
print(r.shape)
img = cv2.merge((b,g,r))
print(img.shape)

5 边界填充

五种常见的边缘填充方法,首先读取图像文件,设置填充尺寸

img = cv2.imread('data/cat.jpg')
fill_lenth = 50
top_size,bottom_size,left_size,right_size = (fill_lenth,fill_lenth,fill_lenth,fill_lenth)

5.1 replicate直接复制

BORDER_REPLICATE,对边缘像素直接复制

 replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)

5.2 reflect反射法

BORDER_REFLECT,反射法,对感兴趣的图像中的像素在两边进行复制

例如: fedcba|abcdefgh|hgfedcb

 reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)

BORDER_REFLECT_101,反射法,也就是以最边缘像素为轴对称

例如: gfedcb|abcdefgh|gfedcba

 reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)

5.3 wrap外包装法

BORDER_WRAP: 外包装法

cdefgh|abcdefgh|abcdefg

wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)

5.4 constant 常量法

BORDER_CONSTANT,常量法,常数值填充

constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT,value=0)

整体代码,并且将填充效果打印出来

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('data/cat.jpg')
fill_lenth = 50
top_size,bottom_size,left_size,right_size = (fill_lenth,fill_lenth,fill_lenth,fill_lenth)

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT,value=0)

plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('BORDER_WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()

打印效果

python版本openCV学习笔记_第2张图片

6 数值计算

import cv2
import matplotlib.pyplot as plt

def cv_show(name,img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
if __name__ == '__main__':
    img_cat = cv2.imread('data/cat.jpg')
    img_dog = cv2.imread('data/dog.jpg')

    # cv_show('cat', img_cat)
    # cv_show('dog', img_dog)

    print(img_cat[:5, :, 0],'\n')
    img_cat2 = img_cat+10
    print(img_cat2[:5,:,0],'\n')

    new_cat = img_cat+img_cat2
    print(new_cat[:5, :, 0],'\n')

    new_add_cat = cv2.add(img_cat,img_cat2)
    print(new_add_cat[:5, :, 0], '\n')

    # 按指定大小缩放
    img_dog = cv2.resize(img_dog,(img_cat.shape[1],img_cat.shape[0]))
    print(img_cat.shape,img_dog.shape)

    # 按比例缩放
    img_dog_1 = cv2.resize(img_dog,(0,0),fx=3,fy=1)

    res = cv2.addWeighted(img_cat,0.4,img_dog,0.6,0)
    add_res = img_dog+img_cat
    cv_show('res',res)
    cv_show('add_res',add_res)

打印结果

D:\conda\envs\pytorch\python.exe A:\python_openCV\3_数值计算.py 
[[142 146 151 ... 156 155 154]
 [108 112 118 ... 155 154 153]
 [108 110 118 ... 156 155 154]
 [139 141 148 ... 156 155 154]
 [153 156 163 ... 160 159 158]] 

[[152 156 161 ... 166 165 164]
 [118 122 128 ... 165 164 163]
 [118 120 128 ... 166 165 164]
 [149 151 158 ... 166 165 164]
 [163 166 173 ... 170 169 168]] 

[[ 38  46  56 ...  66  64  62]
 [226 234 246 ...  64  62  60]
 [226 230 246 ...  66  64  62]
 [ 32  36  50 ...  66  64  62]
 [ 60  66  80 ...  74  72  70]] 

[[255 255 255 ... 255 255 255]
 [226 234 246 ... 255 255 255]
 [226 230 246 ... 255 255 255]
 [255 255 255 ... 255 255 255]
 [255 255 255 ... 255 255 255]] 

(414, 500, 3) (414, 500, 3)

进程已结束,退出代码0

 打印图像结果

python版本openCV学习笔记_第3张图片python版本openCV学习笔记_第4张图片

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