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

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.dtcms.com/a/276865.html

相关文章:

  • 前端面试十二之vue3基础
  • redis汇总笔记
  • 日志系统 on Linux C/C++
  • UE5多人MOBA+GAS 21、给升龙添加连段攻击,从角色的按下事件中传递事件给GA
  • Action-Agnostic Point-Level Supervision for Temporal Action Detection
  • 一扇门铃,万向感应——用 eventfd 实现零延迟通信
  • QCustomPlot绘图保存成PDF文件
  • 网络安全的基本练习
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十九天
  • 行测速算之假设分配法
  • ROS2中的QoS(Quality of Service)详解
  • v-show和v-if的区别
  • 算法复杂度分析:大O表示法详解
  • 婚后才明白,原来结婚真需要一点冲动!
  • 编程与数学 03-001 计算机组成原理 04_非数值数据表示与校验码
  • 解码冯・诺依曼:操作系统是如何为进程 “铺路” 的?
  • 002_Claude模型与定价
  • java进阶(二)+学习笔记
  • Qt 3D模块加载复杂模型
  • Cesium初探-CallbackProperty
  • 开发语言中关于面向对象和面向过程的笔记
  • 打造你的专属智能生活:鸿蒙系统自定义场景开发全流程详解
  • VISUALBERT:一个简单且高效的视觉与语言基线模型
  • 微信小程序案例 - 本地生活(首页)
  • 代码随想录|图论|15并查集理论基础
  • 算法学习笔记:18.拉斯维加斯算法 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • RFCOMM协议详解:串口仿真与TCP/IP协议栈移植技术——面试高频考点与真题解析
  • 1.2.3_2 TCP/IP模型
  • Java小白-设计模式
  • 动态规划理论基础,LeetCode 509. 斐波那契数