当前位置: 首页 > 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.lryc.cn/news/587275.html

相关文章:

  • WEB渗透
  • 利用DeepSeek证明立体几何题目
  • Maven项目没有Maven工具,IDEA没有识别到该项目是Maven项目怎么办?
  • Prometheus Operator:Kubernetes 监控自动化实践
  • 05.判断日期是工作日还是周末
  • 学习python调用WebApi的基本用法(2)
  • 反射内存卡的使用
  • 进制转换结合tk可视化窗口
  • C++高频知识点(十三)
  • Wireshark的安装和基本使用
  • 理解 Robots 协议:爬虫该遵守的“游戏规则”
  • Dubbo + Spring Boot + Zookeeper 快速搭建分布式服务
  • TDengine 使用最佳实践(2)
  • 《Llama: The Llama 3 Herd of Models》预训练数据篇——论文精读笔记
  • html-input 系列
  • ConcurrentHashMap笔记
  • ROS2中的QoS(Quality of Service)详解
  • 【基础算法】倍增
  • 从“被动巡检”到“主动预警”:塔能物联运维平台重构路灯管理模式
  • 动态规划题解_将一个数字表示成幂的和的方案数【LeetCode】
  • 《夏重庆》——一场暴雨的立体诗篇(DeepSeek赏析)
  • SQL140 未完成率top50%用户近三个月答卷情况
  • Flask中的路由尾随斜杠(/)
  • Kafka——Kafka 线上集群部署方案怎么做?
  • 代理模式:控制对象访问
  • AutoLabor-ROS-Python 学习记录——第二章 ROS通信机制
  • CATIA许可价格高,设计部门如何精细化分配?
  • Python 数据挖掘之数据探索
  • 鸿蒙选择本地视频文件,并获取首帧预览图
  • 【算法】贪心算法:柠檬水找零C++