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

Python OpenCV 图像改变

更改图像数据

通过 改像素点 或者 切片的区域

import cv2
import numpy as np	
img = cv2.imread("image.jpg")
print(img[3,5])            # 显示某位置(行3列5)的像素值( 如 [53 34 29] 它是有三通道 B G R 组成) 
img[3,5] = (0,0,255)       # 更改该位置的像素img[0:100,100:200,0]   = 255 # 更改区域(0~100行 100~200列) B通道的值为255
img[100:200,200:300,1] = 255 
img[200:300,300:400,2] = 255  	 
cv2.imshow('changeData',img)  # 显示可看到图像有 蓝色 绿色 红色的方块区域
cv2.waitKey(2000) 
图像通道分离
#---方式一(opencv自带的函数)
import cv2
import numpy as np	
img = cv2.imread("image.jpg")  
b, g, r = cv2.split(img)  # 分离为blue,green ,red 三色通道(注:opencv 通道顺序是BGR,而不是主流的RGB)# img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)  调整通道顺序为RGB# 只分离一个 b = cv2.split(img)[0]   0:b 1:g 2:r                          
cv2.imshow("Blue", r)  
print(r.shape)            # (240,320)
cv2.imshow("Red", g)  
cv2.imshow("Green", b)  
cv2.waitKey(0)#---方式二(numpy的函数)
import cv2
import numpy as np	
img = cv2.imread("image.jpg")  
print(img.shape)  
r = np.zeros((img.shape[0],img.shape[1]), dtype=img.dtype)   #//创建numpy空间
r[:,:] = img[:,:,2]    #//拷贝r通道的数据cv2.imshow("Red", r)  
cv2.waitKey(0)  
图像通道合并
import cv2
import numpy as np		
img = cv2.imread("image.jpg")
b, g, r = cv2.split(img)
merged = cv2.merge([b,g,r])  # 合并通道,如果换成 [r, g, b]就和原图像不一样了
print(merged.shape)      # (240, 320, 3)   合并后顺序是(高度 宽度 通道数)
cv2.imshow("Merged", merged)
cv2.waitKey(0)
图像拼接
import os
import cv2
import numpy as npdef mergePic(files):baseimg= cv2.imread(files[0])for file in files[1:]:  # 遍历除第一个外的numpyimg=cv2.imread(file)baseimg=np.append(baseimg,img,axis=1)   # 横向追加图像(axis=0时为纵向)cv2.imwrite('mergeCv2.png',baseimg)path = "./pic/" # 注:该路径下的图像,必须是相同格式,尺寸的图像
images = []  #先存储所有的图像的名称
for root, dirs, files in os.walk(path):for f in files :images.append(path+f)
print(images,len(images))mergePic(images)
图像混合(虚化后混合)
import cv2
import numpy as np
img1=cv2.imread('image.jpg')
img2=cv2.imread('opencv_logo.jpg')
img2 = cv2.resize(img2,(img1.shape[1],img1.shape[0])) # 注意opencv的resize和shape是反的 
print(img1.shape,img1.size,img1.dtype)
print(img2.shape,img2.size,img2.dtype)dst=cv2.addWeighted(img1,0.7,img2,0.3,0) # 注:不同尺寸会报错,可采用resize或roi方式处理
# 0.7/0.3为图像混合占的比重,在0通道
cv2.imshow('dst',dst)
cv2.waitKey(0)
缩放、旋转和裁剪
import cv2# 打开图像
image = cv2.imread('example.jpg')# 缩放图像
scaled_image = cv2.resize(image, (500, 500))# 旋转图像
rotated_image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)# 裁剪图像
cropped_image = image[100:300, 100:300]# 显示变换后的图像
cv2.imshow('Scaled Image', scaled_image)
cv2.imshow('Rotated Image', rotated_image)
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像平移
import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread('image.jpg')
H = np.float32([[1,0,100], # 创建变换矩阵,100:沿x轴移动距离 50:沿y轴移动距离[0,1,50]])
rows,cols = img.shape[:2]  # 取图片的行数和列数(开始到2之间,即shape[0] shape[1])
newImg = cv2.warpAffine(img,H,(rows,cols)) # 仿射变换# img:变换前图像# H:变换矩阵# (rows,cols)):变换后的大小
plt.subplot(121) # 子图 1行2列1象限
plt.imshow(img)
plt.subplot(122) # 子图 1行2列2象限
plt.imshow(newImg)
plt.show()       # 显示 matplotlib图

在这里插入图片描述
cv2.warpAffine() 是 OpenCV 中用于执行仿射变换的函数之一。它可以用来对图像进行平移、旋转、缩放等操作

import cv2
import numpy as np# 读取图像
image = cv2.imread('input_image.jpg')# 定义平移矩阵,这里将图像向右平移100像素,向下平移50像素
tx = 100
ty = 50
translation_matrix = np.float32([[1, 0, tx],[0, 1, ty]])# 执行仿射变换
translated_image = cv2.warpAffine(image, translation_matrix, (image.shape[1], image.shape[0]))# 显示原始图像和平移后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Translated Image', translated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

图像增强

图像增强是指通过调整图像的亮度、对比度、饱和度等参数来改善图像质量。

使用OpenCV库的cv2.convertScaleAbs()函数来增强图像的对比度。

import cv2# 打开图像
image = cv2.imread('example.jpg')# 增强对比度
enhanced_image = cv2.convertScaleAbs(image, alpha=1.5, beta=0)# 显示增强后的图像
cv2.imshow('Enhanced Image', enhanced_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像复原

图像复原是指通过去除噪声、模糊等失真来恢复图像的原始质量。

使用OpenCV库的cv2.fastNlMeansDenoisingColored()函数来去除图像中的噪声。

import cv2# 打开图像
image = cv2.imread('noisy_image.jpg')# 去除噪声
denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)# 显示去除噪声后的图像
cv2.imshow('Denoised Image', denoised_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像旋转
import cv2
import matplotlib.pyplot as pltimg = cv2.imread('image.jpg')
rows,cols = img.shape[:2]M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1) # 2D矩阵旋转变换# 参1:旋转中心 参2:旋转角度  参3:缩放比例
newImg = cv2.warpAffine(img,M,(rows,cols))  # 仿射变换plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(newImg)	
plt.show()
图像拉伸
import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread('image.jpg')
rows,cols = img.shape[:2]pts1 = np.float32([[50,50],[200,50],[50,200]])   # 变换前位置(通过三个点 来确定)
pts2 = np.float32([[10,100],[200,50],[100,250]]) # 变换后位置(通过三个点 来确定)
M = cv2.getAffineTransform(pts1, pts2) # 仿射变换(参1:变换前位置  参2:变换后位置)res = cv2.warpAffine(img,M,(rows,cols))
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(res)
plt.show()
图像滤波

图像滤波是图像处理中的一个基础任务,用于去除图像中的噪声和细节,增强感兴趣的结构。
使用OpenCV库的cv2.fastNlMeansDenoisingColored()函数来去除图像中的噪声。

import cv2# 打开图像
image = cv2.imread('noisy_image.jpg')# 去除噪声
denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)# 显示去除噪声后的图像
cv2.imshow('Denoised Image', denoised_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像特征提取

图像特征提取是从图像中提取有用的信息,如边缘、角点、形状等。这些特征可以用于图像识别、图像检索等。

使用OpenCV库的cv2.Canny()函数来提取图像的边缘特征。

import cv2# 打开图像
image = cv2.imread('image_with_edges.jpg')# 应用边缘检测
edges = cv2.Canny(image, 100, 200)# 显示边缘检测后的图像
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像分割

图像分割是将图像分成多个部分的过程,每个部分代表图像中的一个对象或区域。

使用OpenCV库的cv2.inRange()函数来根据颜色对图像进行分割。

import cv2# 打开图像
image = cv2.imread('colorful_image.jpg')# 创建颜色范围
lower_red = (0, 50, 50)
upper_red = (10, 255, 255)# 应用颜色分割
mask = cv2.inRange(image, lower_red, upper_red)# 显示分割后的图像
cv2.imshow('Mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关文章:

Python OpenCV 图像改变

更改图像数据 通过 改像素点 或者 切片的区域 import cv2 import numpy as np img cv2.imread("image.jpg") print(img[3,5]) # 显示某位置(行3列5)的像素值( 如 [53 34 29] 它是有三通道 B G R 组成) img[3,5] (0,0,255) # 更改该位置的像素…...

k8s按需创建 PV和创建与使用 PVC

在 Kubernetes 中,PersistentVolume(PV)和 PersistentVolumeClaim(PVC)用于管理存储资源。PV 是集群中的存储资源,而 PVC 是 Pod 请求 PV 的方式。按需创建 PV 通常使用 StorageClass 实现动态存储分配&…...

揭秘云计算 | 2、业务需求推动IT发展

揭秘云计算 | 1、云从哪里来?-CSDN博客https://blog.csdn.net/Ultipa/article/details/143430941?spm1001.2014.3001.5502 书接上文: 过去几十年间IT行业从大型主机过渡到客户端/服务器,再过渡到现如今的万物互联,IT可把控的资…...

【系统面试篇】进程与线程类(2)(笔记)——进程调度、中断、异常、用户态、核心态

目录 一、相关面试题 1. 进程的调度算法有哪些? 调度原则 (1)先来先服务调度算法 (2)最短作业优先调度算法 (3)高响应比优先调度算法 (4)时间片轮转调度算法 &am…...

基于MySQL的企业专利数据高效查询与统计实现

背景 在进行产业链/产业评估工作时,我们需要对企业的专利进行评估,其中一个重要指标是统计企业每一年的专利数量。本文基于MySQL数据库,通过公司名称查询该公司每年的专利数,实现了高效的专利数据统计。 流程 项目流程概述如下&…...

热成像手机VS传统热成像仪:AORO A23为何更胜一筹?

热成像技术作为一种非接触式测温方法,广泛应用于石油化工巡检、电力巡检、应急救援、医疗、安防等“危、急、特”场景。提及热成像设备,人们往往会首先想到价格高昂、操作复杂且便携性有限的热成像仪。但是,随着技术的不断进步,市…...

Spring IoC——依赖注入

1. 依赖注入的介绍 DI,也就是依赖注入,在容器中建立的 bean (对象)与 bean 之间是有依赖关系的,如果直接把对象存在 IoC 容器中,那么就都是一个独立的对象,通过建立他们的依赖关系,…...

Linux 中,flock 对文件加锁

在Linux中,flock是一个用于对文件加锁的实用程序,它可以帮助协调多个进程对同一个文件的访问,避免出现数据不一致或冲突等问题。以下是对flock的详细介绍: 基本原理 flock通过在文件上设置锁来控制多个进程对该文件的并发访问。…...

CentOS下载ISO镜像的方法

步骤 1:访问CentOS官方网站 首先,打开浏览器,输入CentOS的官方网站地址:Download 在网站上找到ISO镜像的下载链接,通常位于“Downloads”或类似的页面上。 选择所需的CentOS版本和架构(如x86_64&#xf…...

Node.js 入门指南:从零开始构建全栈应用

​🌈个人主页:前端青山 🔥系列专栏:node.js篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js-入门指南:从零开始构建全栈应用 前言 大家好,我是青山。作…...

MYSQL 真实高并发下的死锁

https://pan.baidu.com/s/1nM3VQdbkNZhnK-wWboEYxA?pwdvwu6 下面是风控更新语句 ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2023-08-04 01:00:10 140188779017984 *** (1) TRANSACTION: TRANSACTION 895271870, ACTIVE 0 sec starting …...

Zookeeper 简介 | 特点 | 数据存储

1、简介 zk就是一个分布式文件系统,不过存储数据的量极小。 1. zookeeper是一个为分布式应用程序提供的一个分布式开源协调服务框架。是Google的Chubby的一个开源实现,是Hadoop和Hbase的重要组件。主要用于解决分布式集群中应用系统的一致性问题。 2. 提…...

设计模式之结构型模式---装饰器模式

目录 1.概述2.类图3.应用场景及优缺点3.1 应用场景3.2 优缺点3.2.1 优点3.2.2 缺点 4.实现4.1 案例类图4.2 代码实现4.2.1 定义抽象构建角色4.2.2 定义具体构建角色4.2.3 定义抽象装饰器角色4.2.4 定义具体装饰角色4.2.5 装饰器模式的使用 1.概述 装饰器模式是指在不改变现有对…...

Android Pair

Pair在Android中是一种轻量级的工具类,并不是严格意义上的数据结构。 数据结构是一组有组织的方式来存储和管理数据的方式,如数组、链表、栈、队列、树、图等,它们有自己的特性和操作规则。而Pair更像是一个简单的封装,用于在需要…...

华为荣耀曲面屏手机下面空白部分设置颜色的方法

荣耀部分机型下面有一块空白区域&#xff0c;如下图红框部分 设置这部分的颜色需要在themes.xml里面设置navigationBarColor属性 <item name"android:navigationBarColor">android:color/white</item>...

《C#语法一篇通》,有20万字,需8MB字节,宜48小时阅读,没准会继续完善

本文摘录了C#语法的主要内容&#xff0c;接近20万字。 所有鸡汤的味道都等于马尿&#xff01; 如果你相信任何所谓的鸡汤文章&#xff0c;智商堪忧。 计算机语言没有”好不好“之说&#xff0c;骗子才会告诉你哪个语言好&#xff0c;学好任何一本基础语言&#xff08;C&#…...

嵌入式硬件工程师的职业发展规划

嵌入式硬件工程师可以按照以下阶段进行职业发展规划&#xff1a; 1. **初级阶段&#xff08;1-3 年&#xff09; ** - **技术学习与积累**&#xff1a; **电路基础强化**&#xff1a; 深入学习模拟电路和数字电路知识&#xff0c;能够熟练分析和设计基本的电路&#xff0c;…...

QT for android 问题总结(QT 5.15.2)

1.配置好的sdk&#xff0c;显示设置失败 Android SDK Command-line Tools run. Android Platform-Tools installed. Command-line Tools (latest) 版本过高导致报错 &#xff0c;下载一个低版本的latest &#xff0c;替换掉之前latest中的文件。即可&#xff0c;latest 路径如…...

PyTorch实战-手写数字识别-MLP模型

1 需求 包懂&#xff0c;40分钟掌握PyTorch深度学习框架&#xff0c;对应神经网络算法理论逐行讲解用PyTorch实现图像分类代码_哔哩哔哩_bilibili 10分钟入门神经网络 PyTorch 手写数字识别_哔哩哔哩_bilibili pytorch tutorial: PyTorch 手写数字识别 教程代码 从零设计并训…...

(附项目源码)Java开发语言,基于Java的高校实验室教学管理系统的设计与开发 50,计算机毕设程序开发+文案(LW+PPT)

摘 要 随着高校实验室教学与管理的复杂性增加&#xff0c;传统的手动管理系统已经无法满足日益增长的需求。实验室教学不仅涉及到学生的教学安排和管理&#xff0c;还需要对实验设备、实验材料、实验室资源等进行有效的调配和管理。而目前实验室教学管理的各项工作&#xff0c;…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...