opencv python 基本操作

发布于:2025-07-15 ⋅ 阅读:(14) ⋅ 点赞:(0)

python opencv 的基本操作

1.读取图片并打印

import os
import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
img=cv2.imread('C:\learn\MarkDown\anconda\lena.png')
img

2.显示一张图片

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destoryAllWindows()

3.使用函数显示一张图片

def cv_show(name,img): # 定义函数加:
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

4.读取图像

# cv2.IMREAD_GRAYSCALE:灰度图像
# cv2.IMREAD_COLOR: 彩色图像
img=cv2.imread(r'C:\learn\MarkDown\anconda\lena.png',cv2.IMREAD_COLOR)
img
img.shape #显示图像类型(h,w,c)

5.读取带写入灰度图

# cv2.IMREAD_GRAYSCALE:灰度图像
# cv2.IMREAD_COLOR: 彩色图像
img=cv2.imread(r'C:\learn\MarkDown\anconda\lena.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow('img',img)
cv2.waitKey(3000)
cv2.destroyAllWindows()
cv2.imwrite(r'C:\learn\MarkDown\anconda\mylen_gray.png',img)

6.读取视频

# 读取视频
video = cv2.VideoCapture(r'C:\learn\ffmpeg-7.1-full_build-shared\bin\1.mp4')
if video.isOpened():
    open,frame=video.read()
else:
    open = False
while open:
    ret,frame = video.read()
    if frame is None:
        break;
    if ret == True:
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        cv2.imshow('result',gray)
        if cv2.waitKey(10) & 0xFF==27:# 27是退出键
            break;
video.release()
cv2.destroyAllWindows()

7.截取部分图像

img=cv2.imread(r'C:\learn\MarkDown\anconda\lena.png')
img_ry = img[0:50,0:200] #读取h==50 w==200的图像
cv_show('cat',img_ry)

8.颜色通道读取

b,g,r=cv2.split(img)
b

9.合并通道

cv2.merge(b,g,r)

10.读取对应颜色通道显示

cur_img = img.copy()
cur_img[:,:,0]=0 # :表示取所有,意思是h,w,取所有值。[h,w,c] c代表b,g,r 索引0代表B
cur_img[:,:,1]=0
cv_show('r',cur_img) # 所以该图显示是为红色图


cur_img = img.copy()
cur_img[:,:,0]=0 # :表示取所有,意思是h,w,取所有值。[h,w,c] c代表b,g,r 索引0代表B
cur_img[:,:,2]=0 #:表示取所有,意思是h,w,取所有值。[h,w,c] c代表b,g,r 索引0代表R
cv_show('r',cur_img) # 所以该图显示是为绿色图

11.边界填充

import cv2
img=cv2.imread(r'C:\learn\MarkDown\anconda\lena.png')
top_size,bottom_size,left_size,right_size=(50,50,50,50)
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) #外包装
const=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_CONSTANT,value=0) #常量填充

#分类型显示图像
import cv2
import matplotlib.pyplot as plt
plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGIN')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLACT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT101')
plt.subplot(236),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(235),plt.imshow(const,'gray'),plt.title('ORIGIN')
plt.show()
  • BORDER_REPLICATE 复制法:复制最边缘的像素点

  • BORDER_REFLECT: 反射法:对感兴趣的像素在两边复制:fedcba|abcdefgh|hgfedcb

    ​ |<-----| |------->

    直接反转,类似与镜面反射

  • BORDER_REFLECT_101:反射法:以最边缘的像素为轴 gfedcb|abcdefgh|gfedcba

    以a,h为轴,将两边像素去掉,左边去掉a反转,右边去掉g反转

  • BORDER_WRAP:外包装法:cdefgh|abcdefgh|abcdefg

    直接套装

  • BORDER_CONSTANT:常量法:常量填充

    在这里插入图片描述

12.数值计算

img_lena = cv2.imread(r'C:\learn\MarkDown\anconda\lena.png')
img_lena2 = img_lena+10 #超过255值,取余
img_lena2[:5,:,0] #只显示前5行
cv2.add(img_lena,img_lena2)[:5,:,0] #add 函数大于255,取最大值

13.图像融合

  • 先将两张图片resize成大小和通道相同
  • 按比例融合(res=ax+by+Z)
img_trimp = cv2.resize(img_trimp,(512,512))
img_trimp.shape
res=cv2.addWeighted(img_lena,0.4,img_trimp,0.6,0)
plt.imshow(res)
img_trimp = cv2.resize(img_trimp,(512,512))
img_trimp.shape
res=cv2.addWeighted(img_lena,0.4,img_trimp,0.6,0)
plt.imshow(res)

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到