图像预处理

【代码篇】图像预处理阶段:提取图像特征 需要提取的图像特征:1.文件大小;2.宽;3.高;4.图片尺寸;5.图像梯度(表征图像纹理的复杂程度);6.sobel算子(表征图像复杂度);7.色彩丰富度;8.无参考图像评价指标NIQE。最后根据上述图像信息可对相同的图片进行去重操作。 阅读详情

粗略记录一下,用于处理计算机视觉的图像处理代码(不涉及理论)
后续也会持续更新……

1. opencv 读取图片

import cv2 as cv # 导入open cv

# 读取图片路径
img = cv.imread("/home/tlooh/下载/Data/tmp/1",cv.IMREAD_GRAYSCALE)
# 显示图片,picture为显示窗口的title,第二个img为图片路径
cv.imshow("picture",img)
# 参数=0: (也可以是小于0的数值)一直显示,不会有返回值      
# 若在键盘上按下一个键即会消失 ,则会返回一个按键对应的ascii码值       
# 参数>0:显示多少毫秒        超过这个指定时间则返回-1
cv.waitKey(1000)
# 摧毁所有窗口
cv.destroyAllWindows()

image

cv.IMREAD_GRAYSCALE

这个参数应该是灰度化,更多的的灰度处理方式可以看这里:参考博客

2. 直方图均衡化

很详细的一篇参考博客:OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化


import cv2 as cv

# 读取图像,并灰度化
img = cv.imread("/home/tlooh/下载/Data/tmp/1",cv.IMREAD_GRAYSCALE)

# 调用函数cv.calcHist() 绘制直方图
img_hist = cv.calcHist([img],[0],None,[256],[0,256])

# 调用函数 cv.equalizeHist() 实现直方图均衡化
result_img = cv.equalizeHist(img)

# 显示两幅图像对比
cv.imshow('before',img)
cv.imshow('after',result_img)

cv.waitKey(5000)
cv.destroyAllWindows()


# 使用matplotlib进行直方图绘制
import matplotlib.pyplot as plt

# 前后两副直方图对比
plt.hist(img.ravel(),256)
plt.show()

plt.hist(result_img.ravel(),256)
plt.show()


关于cv.calcHist() 函数参数意义:

image

运行效果(效果其实挺明显的):

image

直方图对比,可以看到原来灰度值频率很低的地方得到了填充,也就是所谓的均衡化;

想要追求效果明显的化,可以找一下局部过曝,或者亮度不均匀的图片进行测试,效果会更加明细。

image

3. 双线性插值

tf.gfile.FastGFile(path,decodestyle) 

函数功能:实现对图片的读取。 
函数参数: (1)path:图片所在路径
         (2)decodestyle:图片的解码方式。(‘r’:UTF-8编码; ‘rb’:非UTF-8编码)
# 附上代码
# 图像大小调整
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
tf.compat.v1.disable_eager_execution()


imgpath2 = "/home/tlooh/下载/Data/tmp/2.jpeg"

def resize_img(imgpath,target_size):
    img_raw_data = tf.io.gfile.GFile(imgpath2,'rb').read()
    
    with tf.compat.v1.Session() as sess:
    
        # 将图像使用JPEG的格式解码从而得到图像对应的三维矩阵
        # TensorFlow提供了 tf.image.decode_png 函数对png格式的图像进行解码
        # 解码之后的结果为一个张量,在使用它的取值之前需要明确调用运行的过程
        img_data = tf.image.decode_jpeg(img_raw_data)

#         img_data.set_shape([600,600,3])
#         print(img_data.shape.as_list())
        # 通过tf.image.resize_images函数调整图像的大小
        # 这个函数第一个参数为原始图像,第二个和第三个参数为调整后图像的大小
        # antialias 参数给出了调整图像大小的算法
        resized = tf.image.resize(img_data, target_size, antialias=True)

        # 输出调整后图像的大小,此处的结果为(300, 300, ?)表示图像的大小为300*300
        # 但是在图像的深度还没有明确设置之前会是问号


        # TensorFlow的函数处理图片后存储的数据是float32格式的,
        # 需要转换成uint8才能正确打印图片。
        resized_photo = np.asarray(resized.eval(), dtype='uint8')
        
        plt.imshow(resized_photo)
        plt.show()
        
        # 通道转换
        resized_photo = cv.cvtColor(resized_photo,cv.COLOR_BGR2RGB)
        img_show("resized",resized_photo)
        

    
resize_img(imgpath2,[600,600])

    
(1) 报错 AttributeError: module ‘tensorflow’ has no attribute ‘gfile’

image

原因与解决方案

然后百度,发现是说问题产生的原因:在当前的版本中,gfile已经定义在io包的file_io.py中。

img_raw_data = tf.gfile.FastGFile(imgpath2,'rb').read()

于是改为

    img_raw_data = tf.io.gfile.FastGFile(imgpath2,'rb').read()

仍然报错

image

然后查阅官方文档才发现,调用形式发生变化,这里附上官方文档地址:TensorFlow-Python 文档

image

img_raw_data = tf.io.gfile.GFile(imgpath2,'rb').read()

至此,问题解决

(2) 报错 AttributeError: module ‘tensorflow._api.v2.image’ has no attribute ‘resize_images’

image

原因应该如先前一样,版本高了,函数发生了变化:

image

代码如下,问题解决!

# 双线性插值    
resized = tf.image.resize(img_data, target_size, antialias='bilinear')
(3) plt.imshow() 和 cv.imshow() 展示的图片不一样?

问题如下,img_show() 是我自己封装的cv展示函数

image

image

原理很简单:

opencv的是按照B、G、R 三个通道读取图片;

matplotlib.pyplot 则是R、G、B模式,也就是说opencv有点特别

所以我们需要用函数 cv.cvtColor( xxx , cv.COLOR_BGR2RGB) # CV BGR转变RGB

plt.imshow(resized_photo)
plt.show()
        
# 通道转换
        resized_photo = cv.cvtColor(resized_photo,cv.COLOR_BGR2RGB)
        img_show(resized_photo)
        

image

问题解决!!

【python】图像数据预处理 图像数据预处理:颜色空间转换(1)彩色图像灰度化(2)更换三通道顺序BGR为RGB(3)BGR和HSV颜色空间转换、坐标变换(1)图像的平移(2)图像的旋转(3)图像的镜像(4)图像的缩放、灰度变换、伽玛变换、基于直方图的灰度变化、图像滤波(1)中值滤波器(2)均值滤波器(3)高速滤波(4)锐化... ...... 阅读详情

相关推荐

图像处理篇---图像预处理

图像预处理是机器学习和计算机视觉任务中至关重要的一环,其核心目的是通过对原始图像进行优化和调整提升模型性能、降低噪声干扰、增强关键特征,并适应模型的输入要求。

在你不想做的时候,正是应该做的时候。 3397

计算机视觉(2)——图像预处理

图像预处理实际就是一个图像增强的过程:空间域:点运算:就是基于直方图对图像整体的色差进行调整,对一个点颜色进行调整,跟周围或多或少也有点关系形态学运算:腐蚀、膨胀临域运算:每个点跟他周围的点进行比较或一块进行计算把空间域映射到频率域,对于我们这里来说,意义就是快速计算卷积傅里叶变换小波运算。

清园暖歌的博客 6408

图像预处理&Python

图像预处理 加载图像 from PIL import Image import matplotlib.pyplot as plt img1 = Image.open('C:/Users/31035/Desktop/resize1.png') plt.imshow(img1) img1.size 另寻为 img = Image.open("scr1.jpg") img.save("src1.bm...

邢建好的博客 2976

图像预处理算法————灰度化处理

图像预处理算法适合在FPGA上完成,原理简单且需要快速处理,通常有灰度化、中值、均值滤波等,以及颜色空间转换算法。灰度图像是一种特殊的彩色图像(R=G=B的彩色图像) 只有一种颜色分量,单通道的0-255方法:一般有分量法、最大值法、平均值法、加权平均法四种方法对彩色图像进行灰度化。 除以256可以看作是向右移8位,同样,512,1024,2048等2的n次都可以分析:只有加法乘法以及移位操作 //求平均法GRAY = (R+B+G)/3=((R+B+G)*85)>>8 =((R+B+G)*(64+16

weixin_48988753的博客 7351

【Halcon】图像预处理

预处理: mean_image 消除噪声 binomial_filter 消除噪声 median_image 抑制小斑点或者细线 smooth_image 平滑图像 anisotropic_diffusion 平滑图像同时保存边缘(图像越大越耗时) 1.mean_image mean_image——通过一个均值平滑一个图像 函数原型:mean_image(Image : ImageMean : MaskWidth, MaskHeight : ) 功能:算子(mean_image)对所有输入图像(Image)

weixin_42258743的博客 4572

OCR识别之图像预处理

OCR识别之图像预处理图像预处理之作用及效果图像预处理之操作图像预处理之源代码 图像预处理之作用及效果 无论是使用图像来做识别还是别的操作,都需要对图像做一定的预处理操作,预处理的作用是方便后续我们对图像的识别,分类等操作。对于OCR识别来说要达到的效果如下图: 原始输入图像: 预处理之后的图像: 图像预处理之操作 以本实例的图像来说,首先需要找到内部白色纸片的边界,通过边界找到它的轮廓信息。根据其轮廓信息,应用Opencv中的轮廓近似得到大致的矩形区域,然后通过计算得到该矩形区域的宽高和四个顶点的坐标

qq_25105061的博客 4775

opencv 图像预处理

​ 在计算机视觉和图像处理领域,图像预处理是一个重要的步骤,它能够提高后续处理(如特征提取、目标检测等)的准确性和效率。

qq_70019265的博客 1928

Python实践:图像预处理与数据增强

本文介绍了如何使用Python进行图像预处理和数据增强,以提高机器学习模型的准确性。这些技术可以用于各种类型的图像,包括自然图像、医疗图像和艺术图像。图像灰度化可以将彩色图像转换为灰度图像,减少图像的复杂度和计算量。调整图像的亮度和对比度可以生成新的训练样本,以提高数据集的多样性。图像裁剪可以修剪掉不必要的区域,可以减少噪声和增加图像的清晰度。图像旋转可以改变图像的方向,以便更好地适应算法的输入要求。图像缩放可以改变图像的尺寸,以便适应算法的输入要求。图像翻转可以生成新的训练样本,以提高数据集的大小。

与其临渊羡鱼,不如退而结网 1332

Halcon 图像预处理总结

图像预处理就是在提取目标物之前对图像进行一些预处理,预处理通常包括两大方向:去噪和图像增强。 1.去噪 去噪有分为时域去噪和频域去噪 a)时域去噪通常手法为: 中值滤波:Media_Image 中值滤波的原理是拿特征区域在图像滑动,每一点(与特征区域的中点重合)的值为特征区域所覆盖的范围的中值 均值滤波·:mean_image 均值滤波的原理是拿特征区域在图像滑动,每一点(与特征区域...

qq_41072190的博客 9234

Ubuntu 20.04 上 Geant4 安装避坑全记录:从源码编译到 B1 示例跑通(含数据包加速下载)

本文详细记录了在Ubuntu 20.04系统上从源码编译安装Geant4的全过程,包括环境准备、依赖安装、CMake参数解析、多线程编译优化以及数据包加速下载等关键步骤。特别针对B1示例的测试与验证提供了完整流程,帮助科研人员和学生避开常见安装陷阱,提升粒子物理模拟效率。

weixin_31220401的博客 312

泛微OAe9-自定义资源看板

OA中,有一个很好用的功能:会议室预约。对于一间设立的会议室,同一时间段内,肯定会有不同的人预约同一间会议室,并且,在资源看板里,能看清各个时间段会议室的占用情况,可是会议室资源是有限的,显然不可能让多个人在同一时间段内预约同一间会议室,如会议室已占用,其他人再次申请时,应当拒绝预约。

小松鼠的博客 1848

TensorFlow图像数据处理之图像预处理,如何对图像进行预处理?

TensorFlow图像数据处理之图像预处理 文章目录TensorFlow图像数据处理之图像预处理TFRecord输入数据格式为什么要把数据转化为TFRecord格式TFRecord样例程序图像数据处理TensorFlow图像处理函数输出原始矩阵和原始图像对图像进行大小调整对图像进行按百分比的剪裁对图片的亮度进行处理对图像添加标记框总结 TFRecord输入数据格式 为什么要把数据转化为TFRec...

JMU_Ma的博客 4162

卸载重装Ubuntu22.04双系统

先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗

编程小白的博客 8106

【cv】图像预处理技术——从特征检测讲述图像预处理理论、实践、应用|01

在前一篇中【计算机视觉】图像的获取和表示——图像传感器技术|主要参数解析、成像原理剖析、传感器处理我们主要学习了计算机是如何通过图像传感器来获取图像和经过传感器处理来展现图像的(image capture and representation)。这是计算机视觉的基础,因为今天讲到的图像预处理本质上就是对矩阵的一系列运算,前一篇我们差不多弄清楚图像(即一个个像素点组成的矩阵),是如何从光,被传感器捕获,经过数模转换以及传感器处理一步一步得来的。👧🏻 今天要讲的图像预处理,处理的是什么呢?

Yaoyao2024的博客 1万+

华为项目TR5评审后发现了重大缺陷的应急处理经验

华为TR5评审后发现重大缺陷时,启动分级应急机制:1)缺陷分级:按严重性(致命/严重/一般)评估影响;2)应急响应:跨部门会议制定方案,冻结生产并调配资源;3)根因修复:通过RCA定位问题,设计变更后回归测试;4)变更管理:评审修复影响,调整发布策略;5)持续改进:记录缺陷闭环,优化流程。案例显示,软件闪退问题通过热修复补丁和代码重构解决。关键工具包括Jira、FMEA等,确保缺陷在量产前拦截,降低风险。

从技术实践立足,从项目管理方法论延伸思考 1069

ThunderScope开源示波器

4CH,1GSa/S 开源示波器。前端很简洁,BUF802+LMH6518,ADC是HMCAD1511,用Xilinx A7 FPGA进行控制,数据通过PCIE总线传输到上位机处理。目前这个项目已经被挂到了Xilinx官网,强。设计日志:https://hackaday.io/project/180090-thunderscope开源地址:https://github.com/EEVengers/ThunderScope。

leida_wt的博客 8188

基于MATLAB的数字图像预处理

1.2.1图像预处理研究的意义 图像预处理是将每一个图像分检出来交给识别模块识别。图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取、图像分割、匹配和识别的可靠性。 随着电子技术和计算机技术的不断提高,图像预处理技术在视频监控系统中获得了巨大发展。对视频监控系统来说,监控环境中的噪声以及图像在传输、接收过程中会产生的噪声降低了图像质量,使图像模糊。我们可以通过图像增强技术改善图像的质量。在一幅图像中,人们只对图中的某些目标感兴趣

FPGA/MATLAB学习教程/源码/项目合作开发 9289

RPN 解析

RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络; 1. RPN的意义 RPN第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Se

lanran2的博客 10万+
上一篇: Ubuntu 20.04LTS 文件夹图标丢失
下一篇: ubuntu-docker
Toyag
博客等级 码龄8年 190粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值