图像处理代码整理_jsBeSelf的博客-程序员秘密_图像处理代码

技术标签: python  计算机视觉  图像处理  opencv  

整理图像处理相关的代码和问题,方便查阅

读取图片

# 法1
import cv2
image_cv = cv2.imread('0.jpg')  # numpy.ndarray
# 法2
from PIL import Image
image_pil = Image.open('0.jpg')  # PIL图片格式
# 法1法2的结果互相转换
image_pil = Image.fromarray(image_cv)  # 1->2
image_numpy = np.array(image_pil)  # 2->1
# 法3
import skimage.io as io
image = io.imread('0.jpg')  # 直接为RGB
io.imshow(image)

图片保存

# 法1
img = cv2.imread('0.jpg')
cv2.imwrite(filepath, img)  # filepath: 如'./xxx.jpg'
# 法2
image = Image.fromarray(img)  # 如果img为单通道,则需要在这句后加上 .convert('RGB'),否则会报错
img_resize = image.resize((100, 100), Image.LANCZOS)  # 可以进行resize一下
img_resize.save('xxx.jpg', format='jpeg')

图像变换

# 更改颜色通道 
# OpenCV使用BGR约定存储彩色图像,matplotlib使用RGB约定。
img_color = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32) # 同时修改数据类型
# PIL.Image.convert
img_1 = img.convert('1')
img_L = img.convert('L')
img_RGB = img.convert('RGB')

# 更改大小
img_size = cv2.resize(img_rgb, (self.width, self.height), cv2.INTER_AREA)

# 变换维度
torch.Tensor.permute, eg:x.permute(2, 0, 1)  # 更改顺序
numpy.transpose, eg:x.transpose(2, 0, 1)  # 更改顺序
torch.squeeze()  # 降维
torch.unsqueeze()  # 增维
numpy.newaxis, eg:x[:,np.newaxis,:]  # 增维
numpy.squeeze()  # 降维 

图像处理

# 高斯模糊
image_gauss = cv2.GaussianBlur(image, (3, 3), 0)
# 图片灰度化
image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# 边缘算子
image_canny = cv2.Canny(image,200,250)
# 二值化
ret, image_two = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU)
# 形态学(腐蚀,膨胀,开操作,闭操作)
# 闭操作
kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (35, 8))
image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernelX)
# 膨胀腐蚀
kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (20, 1))
kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 18))
image = cv2.dilate(image, kernelX)
image = cv2.erode(image, kernelX)
image = cv2.erode(image, kernelY)
image = cv2.dilate(image, kernelY)

# 中值滤波
image = cv2.medianBlur(image, 15)

绘制

# 展示图像
fig,ax = plt.subplots(1)
fig.set_size_inches(18.5, 10.5)
ax.imshow(img.permute(1, 2, 0))  # 将通道C换到第三位
# 在图像上绘制矩形
rect = patches.Rectangle((xmin,ymin),(xmax-xmin),(ymax-ymin),linewidth=2,edgecolor='r',facecolor='none')
ax.add_patch(rect)
# 添加文字
ax.text(xmin, ymin, f"{
      label}", horizontalalignment='center', verticalalignment='center',fontsize=20,color='b')
plt.savefig(fullPath)  # 若要保存,得在show()之前
plt.show()

常见问题

1)图像数据类型是np.float32还是np.uint8
2)图像维度数量,灰度图和RGB,BGR
3)C,W,H相对位置
4)图像处理的参数
5)是否被转置

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_46203495/article/details/122738154

智能推荐

android studio : Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.31_Mars-xq的博客-程序员秘密

插件版本配置:仓库配置:ext.kotlin_version = '1.5.31'repositories { maven{ url 'https://maven.aliyun.com/repository/google'} maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'} maven{ url 'https://maven.aliyun.com/repository/public'} ma

[USACO09OCT]热浪Heat Wave 洛谷 1339 最短路_A_loud_name的博客-程序员秘密

题目大意单源最短路···········分析写dij就好了, 但是 我写了dij+堆优化版本的。学习了如何使用c++的优先队列。ps:家里的键盘很恶心啊:f5、f7、f11太小了,按不到。 ps:c++的模板正在补全中。code//dij+堆优化版本#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#i

【操作系统】用户态线程和内核态线程有什么区别?_吻雨_Beta的博客-程序员秘密_用户线程和内核线程

本文内容转载于“拉勾教育”的讲义,详细可看拉勾教育的课程。本人学习之余做做笔记,顺便当个搬运工。目录用户态线程和内核态线程有什么区别?什么是用户态和内核态?系统调用过程线程模型用户态线程内核态线程用户态线程和内核态线程之间的映射关系总结用户态线程和内核态线程有什么区别?这是一个组合型的问题,由很多小问题组装而成,比如:用户态和内核态是什么?用户级线程和内核级线程是一个怎样的对应关系?内核响应系统调用是一个怎样的过程?什么是用户态和内核态?Kernel

Qt学习资源汇总_huangliujing99的博客-程序员秘密

《Qt 学习之路 2》目录Qt 快速入门系列教程跨平台技术Qt第七根弦的技术博客QtQt notebook

IntelliJ IDEA 配置 .ideavimrc_冰阔落的博客-程序员秘密_.ideavimrc

ideavim 介绍中说如果需要配置该插件可以通过  .ideavimrc文件在类unix系统中将 .ideavimrc 放置在用户根目录~/.ideavimrc在windows系统中将.ideavimrc文件放置在如下目录C:\Users\你的用户名\.ideavimrcwindows系统中无法创建以 . 开头的文件,可以在记事本中通过另存为的方式创建,编

使用nginx部署多个前端项目_barnettyj的博客-程序员秘密_nginx配置多个前端项目

常见3种方法来实现在一台服务器上使用nginx部署多个前端项目的方法。基于域名配置 基于端口配置 基于location配置基于域名配置基于域名配置,前提是先配置好了域名解析。比如说你自己买了一个域名:www.test.com。 然后你在后台配置了2个它的二级域名: a.test.com、 b.test.com。配置文件如下: 配置 a.test.com 的配置文件:vim /usr/nginx/modules/a.conf复制代码server { listen

随便推点

英语歌曲:Home(家)_北京小辉的博客-程序员秘密

Another summer day 又一个夏天 Has come and gone away 来了又走 In Paris or Rome… 在巴黎或者罗马 But I wanna go home 但是我只想回家… uhmMay be surrounded by 可能被成千上万的人 A million people I 所拥戴追逐 但我 Still feel al

一元四次方程c语言程序编写,一元高次方程数值解法C程序实现探讨..doc_墨村拓哉的博客-程序员秘密

一元高次方程数值解法C程序实现探? 一元高次方程作为方程的一部分,对我们后续的学习起着相当重要的作用求解一元高次方程的根在计算数学方面既是难点也是重点。一元三次方程和一元四次方称有一般解法,但是比较复杂,且超过了一般的知识范围5次以及5次以上的代数方程,没有一般的公式解法。文我们了解了系数在有理数域且只有有理根的一元高次方程的解法技巧一元二次方程根式解的推敲了一元三次、四次方程的根式解;最后介绍了...

《Java代码审计》作者柯俊师傅告诉你为什么要学Java代码审计,不看是你的损失!..._Ms08067安全实验室的博客-程序员秘密

出品|MS08067实验室(www.ms08067.com)李柯俊:国内某知名企业实验室高级web研究员,《java代码审计:入门篇》作者,曾在freebuf、 安全客发表多篇高质量技术...

无需写代码!可一键生成前后端代码的开源工具_CSDN资讯的博客-程序员秘密

作者|HelloGitHub-小鱼干来源 | HelloGitHub(ID:GitHub520)头图 | CSDN下载自东方ICJeecgBoot 是一款基于代码生成器的低代码开...

在虚拟环境打包pyinstaller打包记录_ZHHHHHJ66的博客-程序员秘密

新建一个新文件夹在新建文件夹myproject中打开cmd,创建一个不依赖系统python包的虚拟环境,名为venv。关闭cmd.virtualenv --no-site-packages venv进入myproject\venv\Scripts,打开cmd,执行命令activate,激活虚拟环境C:\Users\acer\myproject\venv\Scripts&gt;activate返回(venv) C:\Users\acer\myproject\venv\Scripts&..

推荐文章

热门文章

相关标签