此篇博客是针对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

ksize: 卷积框的尺寸
anchor: (可选参数)表示定位点或者锚点,默认值为(-1,-1),指的是卷积框的中心
borderType:(可选参数)决定图像在进行滤波操作(卷积)时边沿像素的处理方式

3.3 cv2.GaussianBlur

高斯滤波

卷积核换成高斯核(即卷积核中心的值最大,其余位置根据距离中心元素的距离递减),即将均值滤波的求平均值改为求加权平均值。通常用来处理高斯噪声,卷积框形如:

K = 1 16 [ 1 2 1 2 4 2 1 2 1 ] K=\frac{1}{16}\begin{bmatrix} 1 & 2 &1 \\ 2& 4 &2 \\ 1& 2&1 \end{bmatrix} K=161121242121

K = 1 273 [ 1 4 7 4 1 4 16 26 16 4 7 26 41 26 7 4 16 26 16 4 1 4 7 4 1 ] K=\frac{1}{273}\begin{bmatrix} 1&4 &7 &4 &1 \\ 4& 16 & 26 &16 &4 \\ 7&26 &41 &26 &7 \\ 4& 16&26 & 16 &4 \\ 1& 4 &7 &4 &1 \end{bmatrix} K=27311474141626164726412674162616414741

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.4 cv2.medianBlur()

中值滤波是用与卷积框对应位置像素的中值来替代中心像素的值,通常用来处理椒盐噪声。

cv2.medianBlur(src,ksize)

src: 输入任意通道的图像,但是图像深度只能是CV_8U, CV_16U, or CV_32F,对于更大的孔径尺寸,只能是CV_8U,因此输入图像不能为归一化的数组。
**ksize:**孔径线性尺寸; 它必须是奇数且大于1,例如:3,5,7 …

高斯滤波通常用来去除高斯噪声,例如:

img_blur=cv2.medianBlur(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)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐