利⽤python对TIFTIFF或者其他图像的处理过程
此篇博客是针对TIF/TIFF图像⼩⽩的,但具有⼀些python基础的。
1.什么是TIF/TIFF图像?
先说⼀下其他的图像格式;
JPG/JPEG 是如今最常⽤的图⽚格式之⼀,其优点为兼容性⾼、传输速度快、内存⼩。JPG是⼀种有损压缩⽅案,可在保持较⾼图⽚质量的前提下,被压缩到原图内存的⼆⼗分之⼀⼤⼩。
当然,如果是出于对图⽚⾼质量的要求,JPG格式的图⽚依然存在失真的情况,故⽽⽆法与PNG或TIF格式相⽐较.
值得⼀提的是,在图⽚编辑中,对于JPG格式的图⽚,每⼀次输出都会损失像素质量,因此当我们在⽤图⽚编辑软件,编辑JPG格式的图⽚时,尽量不要过于频繁地保存步骤,防⽌像素损失。
PNG是⼀种较为新型的图⽚格式,符合WWW标准。PNG结合了JPG和GIF的优点,对于图⽚本⾝质量的减损⾮常低。因其能够⽀持压缩不失真、透明背景、渐变图像的制作要求,PNG格式也是各⼤制图软件例如PS、InDesign输出或编辑的原始格式。
所以,当你开始初学Adobe的制图软件时,如果要对⼀个图⽚进⾏多次修改,建议将其导⼊导出为PNG格式,⽅便你随时修改,不⽤担⼼损失像素或⽆法修改步骤的发⽣。
TIF格式是⼀种跨平台的图⽚格式,可同时⽀持Windows和Mac系统的操作。TIF格式可以在保证图⽚不失真的情况下压缩,且保留图⽚的分层或是透明信息。TIF\TIFF 是 标签图像⽂件格式(Tag Image File Format,TIFF)是⼀种灵活的位图格式,主要⽤来存储包括照⽚和艺术图在内的图像,最初由Aldus公司与微软公司⼀起为PostScript打印开发。TIFF与JPEG和PNG⼀起成为流⾏的⾼位彩⾊图像格式。
另外,由于TIF格式图⽚⽀持⾼位彩⾊图像印刷,也被⼴泛使⽤于扫描传真、⽂字处理、光学符号识别等应⽤当中。
2. Python学习之读取TIF/TIFF⽂件
cv::imread是从指定⽂件载⼊⼀幅图像
cv::imwrite是保存⼀幅图像到指定的⽂件中。
其中:
cv::imread内部都是通过ImageDecoder类来进⾏图像解码的。cv::write内部是通过ImageEncoder类来进⾏图像编码的.
Python: cv2.imread(filename[, flags]))
⽬前,⽀持如下的图像输⼊:
Windows bitmaps - *.bmp, *.dib (always supported)
JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
JPEG 2000 files - *.jp2 (see the Notes section)
Portable Network Graphics - *.png (see the Notes section)
WebP - *.webp (see the Notes section)
Portable image format - *.pbm, *.pgm, *.ppm (always supported)
Sun rasters - *.sr, *.ras (always supported)
TIFF files - *.tiff, *.tif (see the Notes section)
⽀持的数据类型极多
⽤法: cv2.imread(path, flag)
cv2.imread()⽅法从指定的⽂件加载图像。如果⽆法读取图像(由于缺少⽂件,权限不正确,格式不受⽀持或格式⽆效),则此⽅法将返回⼀个空矩阵。
flag 指定应该读取图像的⽅式。默认值为cv2.IMREAD_COLOR,也就是1。它指定加载⼀个彩⾊图像。图像的透明度将被忽略。它是默认标识。
flag 其他标识
**0:**以灰度模式加载图像
-1: 指定加载包含alpha通道的图像
备注:cv2 读进来的bgr 格式,plt 显⽰是以rgb 格式,所以颜⾊就反着了。plt 之前,先将图⽚转为rgb 即可。使⽤
cv2.cvtColor (img ,cv2.COLOR_BGR2RGB )
读取TIF/TIFF ⽂件
import cv2
import pylab
import matplotlib .pyplot as plt
img = cv2.imread ('a1.tif',-1) #读取图像
plt .figure (dpi =180) #显⽰图像
plt .imshow (img )
pylab .show ()
显⽰图像
使⽤函数cv2.imshow() 显⽰图像。窗⼝会⾃动调整为图像⼤⼩。第⼀个参数是窗⼝的名字,其次才是我们的图像。你可以创建多个窗⼝,只要你喜欢,但是必须给他们不同的名字。
cv2.imshow ('image',img )
cv2.waitKey (0) # 0讲⽆限期等待键盘输⼊,也⽤来检测是否被按下
cv2.destroyAllWindows () #删除所有建⽴的窗⼝
3. openCV 中的滤波
3.1 cv2.BoxFilter
采⽤卷积框(箱式滤波器)模糊图像,卷积框如下所⽰:
其中
boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]])
. @param src input image. 输⼊图像
.
@param dst output image of the same size and type as src. 输出图像与srcYIY
. @param ddepth the output image depth (-1 to use src.depth()). 输出图像的深度,-1是原图像的深度
. @param ksize blurring kernel size. 内核的⼤⼩(3,3)的核⼤⼩
. @param anchor anchor point; default value Point(-1,-1) means that the anchor is at the kernel 锚点
. center.
. @param normalize flag, specifying whether the kernel is normalized by its area or not. 表⽰内核是否被归⼀化
. @param borderType border mode used to extrapolate pixels outside of the image, see #BorderTypes. #BORDER_WRAP is not supported. 图像像素便捷模式,⼀般使⽤默认
. @sa blur, bilateralFilter, GaussianBlur, medianBlur, integral
例如:
cc=cv2.boxFilter(img1,-1,ksize=(31,31))
3.2 cv2.blur
采⽤归⼀化的卷积框(箱式滤波器)模糊图像,卷积框形如:
与 boxfilter相似,都是达到平滑的效果
cv2.blur(src,ksize[,anchor[,borderType]])
src: 输⼊的原图像,可以有任意的通道,但是图像深度须 CV_8U, CV_16U, CV_16S, CV_32F, CV_64F
htmlborderksize: 卷积框的尺⼨
anchor: (可选参数)表⽰定位点或者锚点,默认值为(-1,-1),指的是卷积框的中⼼
borderType:(可选参数)决定图像在进⾏滤波操作(卷积)时边沿像素的处理⽅式
3.3 cv2.GaussianBlur
⾼斯滤波
卷积核换成⾼斯核(即卷积核中⼼的值最⼤,其余位置根据距离中⼼元素的距离递减),即将均值滤波的求平均值改为求加权平均值。通常⽤来处理⾼斯噪声,卷积框形如:
cv2.GaussianBlur (src ,ksize ,sigmaX [,sigmaY [,borderType ]])
src: 任意通道数的输⼊图像
ksize: 卷积框的尺⼨,宽度和⾼度可以不同,但必须为正奇数;或者可以为0,然后由sigma计算得出
sigmaX: X⽅向的标准差。标准差越⼩,中间位置权值越⼤,模糊越不明显
sigmaY: (可选参数),若只指定了sigmaX的值,sigmaY取相同值;若都为0,则由ksize.height和ksize.width计算出来
borderType:(可选参数)决定图像在进⾏滤波操作(卷积)时边沿像素的处理⽅式
⾼斯滤波通常⽤来去除⾼斯噪声,例如:
img_blur =cv2.GaussianBlur (img_noise ,(5,5),9)
3.dianBlur()
中值滤波是⽤与卷积框对应位置像素的中值来替代中⼼像素的值,通常⽤来处理椒盐噪声。
src: 输⼊任意通道的图像,但是图像深度只能是CV_8U, CV_16U, or CV_32F,对于更⼤的孔径尺⼨,只能是CV_8U,因此输⼊图像不能为归⼀化的数组。
**ksize:**孔径线性尺⼨; 它必须是奇数且⼤于1,例如:3,5,7 …
⾼斯滤波通常⽤来去除⾼斯噪声,例如:
img_blur =dianBlur (img_noise ,3)
3.5 cv2.filter2D()
⾃定义卷积核低通滤波,可以实现对图像的卷积基本操作,我们可以⾃⾏设计卷积核,实现均值滤波,⾼斯滤波等。
cv2.filter2D (src ,ddepth ,kernel [,anchor [,delta [,borderType ]]])
参数:
src: 输⼊的图⽚
ddepth: 输出图像的深度,当取值为-1时表⽰与原图像深度相同
kernel: 卷积核
anchor: (可选参数)表⽰定位点,默认值为(-1,-1),指的是卷积框的中⼼
delta: (可选参数)在将⽬标图像存储进多维数组前,可以将每个像素值增加delta,默认为0
borderType:(可选参数)决定图像在进⾏滤波操作(卷积)时边沿像素的处理⽅式
#⾃定义⼀个均值滤波器
kernel =np .ones ((5,5))/25
#卷积操作,使delta 分别为0和50
img_filter =cv2.filter2D (img_original ,-1,kernel ,delta =0)K =161⎣⎡121242121
⎦⎤K =2731⎣⎢⎢⎢⎢⎡1474141626164
726412674162616414741⎦⎥⎥⎥⎥⎤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论