Python OpenCV 图像改变

news/2024/11/2 8:35:39/
更改图像数据

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

python">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) 
图像通道分离
python">#---方式一(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)  
图像通道合并
python">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)
图像拼接
python">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)
图像混合(虚化后混合)
python">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)
缩放、旋转和裁剪
python">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()
图像平移
python">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 中用于执行仿射变换的函数之一。它可以用来对图像进行平移、旋转、缩放等操作

python">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()函数来增强图像的对比度。

python">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()函数来去除图像中的噪声。

python">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()
图像旋转
python">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()
图像拉伸
python">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()函数来去除图像中的噪声。

python">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()函数来提取图像的边缘特征。

python">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()函数来根据颜色对图像进行分割。

python">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()

http://www.ppmy.cn/news/1543818.html

相关文章

Java:网络编程套接字(socket)

TCP和UDP的区别: TCP:有连接,可靠传输,面向字节流,全双工; UDP:无连接,不可靠传输,面向数据报,全双工; 有连接/无连接: 此处的连接是"抽象"的连接: 通信双方如果保存了通信对端的信息,就相当于是"有连接"; 如果不保存对端的信息,就是"无连接&qu…

数据结构————map,set详解

今天带来map和set的详解&#xff0c;保证大家分清楚 一&#xff0c;概念 map和set是一种专门用来搜索的容器或数据结构 map能存储两个数据类型&#xff0c;我们称之为<key-value>模型 set只能存储一个数据类型&#xff0c;我们称之为纯<key>模型 它们的效率都非…

ATom:加州理工学院(CIT)化学电离质谱仪(CIMS)测量的气相有机和无机分析物的浓度CIT-CIMS

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATom: In Situ Data from Caltech Chemical Ionization Mass Spectrometer (CIT-CIMS), V2 简介 Caltech Chemical Ionization Mass Spectrometer (CIT-CIMS), V2是一种用于收集原位数据的质谱仪。…

Llama 3.2 Vision Molmo:多模态开源生态系统基础

编者按&#xff1a; 视觉功能的融入对模型能力和推理方式的影响如何&#xff1f;当我们需要一个既能看懂图像、又能生成文本的 AI 助手时&#xff0c;是否只能依赖于 GPT-4V 这样的闭源解决方案&#xff1f; 我们今天为大家分享的这篇文章&#xff0c;作者的核心观点是&#xf…

Vmos pro-虚拟机 解锁永久vip

[应用名称] 应用名称&#xff1a;Vmos pro [应用版本] 应用版本&#xff1a;2.99 [软件大小] 软件大小&#xff1a;32.2mb [应用简介] 应用简介&#xff1a;Vmos Pro这款安卓虚拟机平台&#xff0c;提供了多样化的ROM版本选择。用户可根据自身需求更换ROM&#xff0c;调…

力扣hot100-->位运算

目录 位运算 1. 136. 只出现一次的数字 2. 338. 比特位计数 3. 461. 汉明距离 位运算 1. 136. 只出现一次的数字 简单 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设…

【Nginx系列】Nginx 中的`proxy_set_header`指令:Host 字段的区别与联系

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

pycharm小游戏飞机射击

导入pygame模块 下载成功 图片略显粗糙 python 复制 import pygame import random # 初始化 pygame pygame.init() # 屏幕大小 SCREEN_WIDTH 800 SCREEN_HEIGHT 600 # 颜色 WHITE (255, 255, 255) BLACK (0, 0, 0) GREEN (0, 255, 0) RED (255, 0, 0) # 飞机速度 P…