当前位置: 首页 > ai >正文

opencv python 基本操作

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)

在这里插入图片描述

http://www.xdnf.cn/news/15234.html

相关文章:

  • Python自动化:每日销售数据可视化
  • 日志系统 on Linux C/C++
  • STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南
  • Datawhale AI夏令营——基于带货视频评论的用户洞察挑战赛
  • 关于 java:11. 项目结构、Maven、Gradle 构建系统
  • Cesium初探-CallbackProperty
  • 【算法分析与设计】研究生第二次算法作业:基于分治策略的有序数组中位数查找与逆序对计数 latex源码和pdf
  • 五、深度学习——CNN
  • 卫星通信终端天线的5种对星模式之二:DVB跟踪
  • FastAdmin项目开发三
  • Anthropic:从OpenAI分支到AI领域的领军者
  • ubuntu18.04 升级Ubuntu 20.04
  • Transformer基础
  • L1正则化 VS L2正则化
  • c++中的STL
  • Redis 实现分布式锁
  • Kotlin文件操作
  • 2025 年 4-6 月大模型备案情况分析
  • 单链表的题目,咕咕咕
  • 【Scratch】从入门到放弃(四):指令大全-九大类之事件、控制、侦测
  • 【小情绪小感悟】
  • houdini 用 vellum 制作一个最简单的布料
  • SiC 型储能充电器设计与研究
  • 岛屿数量问题
  • HT8313功放入门
  • Cell2location maps fine-grained cell types in spatial transcriptomics 文章解析
  • Golang操作MySQL json字段优雅写法
  • 【数据结构初阶】--顺序表(三)
  • 【机器学习实战笔记 16】集成学习:LightGBM算法
  • 【读书笔记】从AI到Transformer:LLM技术演进全解析