python图像处理实战(二)—二值化图像与线性变换

这篇具有很好参考价值的文章主要介绍了python图像处理实战(二)—二值化图像与线性变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python图像处理实战(二)—二值化图像与线性变换

🚀写在前面🚀

🖊个人主页:https://blog.csdn.net/m0_52051577?type=blog 

🎁欢迎各位大佬支持点赞收藏,三连必回!!

🔈本人新开系列专栏—python图像处理

❀愿每一个骤雨初晴之时,所有的蜻蜓振翅和雨后惊雷,都归你。

前言

        首先引入以下灰度变换的概念。

        灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是 为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。——来自百度百科

        这里采用opencv中的二值化相关方法进行灰度处理,进行灰度变换的非线性变换。

目录

一、所需函数

二、图像基本知识

1、自定义图像

 2、三种常见图像相互转换

3、通道分离与合并 

三、图像运算

 四、实例


 注:本文涉及到的图片资源可在博客积分资源中获取,相关链接:https://download.csdn.net/download/m0_52051577/87844285?spm=1001.2014.3001.5503

一、所需函数

## 1. 图像读取
img = cv.imread()

## 2. 彩色图转灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

## 3. 二值化图像(灰度图转二值图)
_, img_bin = cv.threshold(img_gray, th1, th2, cv.THRESH_BINARY)

## 4. 保存图像
cv.imwrite('pic/bear_gray.jpg', img_gray)

## 5. 通道分离
b, g, r = cv.split(img)

## 6. 通道合并
img_new = cv.merge([b, g, r])

## 7. 两图像相加、相减、相乘、相除
img = cv.add(img1, img2)
img = cv.subtract(img1, img2)
img = cv.multiply(img1, img2)
img = cv.divide(img1, img2)

二、图像基本知识

1、自定义图像

b = np.array([
    [0, 127, 255],
    [255, 0, 255],
    [10, 50, 100]
], dtype=np.uint8)

g = b.T
r = b - g

# show(b)
show(cv.merge([b, g, r]))

# cv.imwrite()

python图像处理实战(二)—二值化图像与线性变换 

注:其中,b矩阵中的三个行向量分别表示纯色图像,其中0表示纯黑,255表示纯白。g表示b的转置矩阵,r则是将b与g矩阵对应元素相减,最后再用merge函数将b,g,r三个单通道的纯色图像合并成一张真彩色三通道图像。 

RGB颜色对照表链接:RGB颜色对照表

 2、三种常见图像相互转换

首先预先定义函数。 若图片的维度为2,即灰度图,则读取并展示图片;若不为灰度图,即彩色图,则采用cvtColor()函数进行色彩空间的转换。

def show(img):
    if img.ndim == 2:
        plt.imshow(img, cmap='gray')
    else:
        plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
    plt.show()
# 读取彩色图
img = cv.imread('pic/bear500x333.jpg')
# print(img)
show(img)

 python图像处理实战(二)—二值化图像与线性变换

# 读取灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
show(img_gray)

 python图像处理实战(二)—二值化图像与线性变换

如图,已经将彩色图进行灰度处理。 

# 二值化图像
_, img_bin = cv.threshold(img_gray, 150, 255, cv.THRESH_BINARY)
show(img_bin)

python图像处理实战(二)—二值化图像与线性变换

 如图,将灰度图二值化处理,其中设定的值为150和255。该函数根据原图像的像素点分布占比对图像根据设定的值进行二值化。

# 保存图像
cv.imwrite('pic/apple_gray.jpg', img_gray)
cv.imwrite('pic/apple_bin.jpg', img_bin)

3、通道分离与合并 

 该部分涉及到cv库中的split()函数,该函数用于将多通道图像分离成单通道图像,即将三通道的彩色图分离成三个单通道的纯色图。

# 分离BGR通道

# r = img[:,:,0]
b, g, r = cv.split(img)
# b.shape
#show(b)
#show(g)
show(r)

python图像处理实战(二)—二值化图像与线性变换python图像处理实战(二)—二值化图像与线性变换 python图像处理实战(二)—二值化图像与线性变换

如图,从左到右依次为b,g,r对应的单通道图像。倘若我们将b,g,r重新合并,则可将图像还原为原彩色图。

# 合并BGR通道
img_new = cv.merge([b, g, r])
show(img_new)

 python图像处理实战(二)—二值化图像与线性变换

 此外,还可将原彩色图中的r,g,b三个色彩通道按自定义的权重进行重新调整,将其转化为灰度图。如下所示:

# rgb转灰度图
img_gray2 = 0.114*b + 0.587*g + 0.299*r
# img_gray2 = (0.299*r + 0.587*g + 0.114*b).astype(np.uint8)
show(img_gray2)

 python图像处理实战(二)—二值化图像与线性变换

三、图像运算

该部分主要涉及图像的加减乘除处理。 

bg = cv.imread('D:\\proclass\\class\\pic\\background.jpg', 0)
ob = cv.imread('D:\\proclass\\class\\pic\\computer500x500.jpg', 0)
show(np.hstack([bg, ob]))

 python图像处理实战(二)—二值化图像与线性变换

注:将两个图像用hstack()函数实现水平方向的拼接,但要求两个图像的维度必须一致。 具体可用shape()函数对图像的维度进行检查。

# 图像相加
# img_add = cv.add(bg*0.5, ob*0.5)
img_add = bg * 0.5 + ob * 0.5
show(img_add)

python图像处理实战(二)—二值化图像与线性变换

将两张图片按定义的权重进行相加处理,也可采用cv中的add()函数。 相加主要用于混合图像和添加噪声。

# 图像相减
# img_sub = img_add - bg * 0.5
img_sub = cv.subtract(img_add, bg * 0.5)
show(img_sub)

 python图像处理实战(二)—二值化图像与线性变换

同理,对两张图像进行相减操作。 用来消除背景或者比较差异。

# 图像相乘
mask = cv.imread('D:\\proclass\\class\\pic\\mask500x500.jpg', 0)
# mask /= 255
# show(mask)
show(np.hstack([ob, mask]))
img_mul = cv.multiply(ob/1.0, mask/255)
show(img_mul)

 python图像处理实战(二)—二值化图像与线性变换python图像处理实战(二)—二值化图像与线性变换

 进行相乘处理,用来遮挡图像。

# 图像相除

ob_noise = cv.imread('D:\\proclass\\class\\pic\\hedgehog_noise_500x500.jpg', 0)
show(np.hstack([ob, ob_noise]))
img_div = cv.divide(ob, ob_noise+1)
show(img_div)

 python图像处理实战(二)—二值化图像与线性变换python图像处理实战(二)—二值化图像与线性变换

 其中,ob_noise为带噪声的图像,用来比较两张图中的差异。

 四、实例

第一步,读入图片。

bg = cv.imread('pic/petal500x500.jpg')
ob = cv.imread('pic/hedgehog500x500.jpg')
mask = cv.imread('pic/mask500x500.jpg')

show(np.hstack([bg, ob, mask]))

python图像处理实战(二)—二值化图像与线性变换  

 第二步,用mask对第二张图片进行遮挡。

ob_select = np.float32(ob/1.0) * np.float32(mask/255.0)
show(np.uint8(ob_select))

python图像处理实战(二)—二值化图像与线性变换 

 第三步,将mask图像的周围区域进行边缘处理,并用第一张图像对黑洞周围的区域进行填充。

bg_select = np.float32(bg/1.0) * np.float32(1-mask/255.0)
show(np.uint8(bg_select))

 python图像处理实战(二)—二值化图像与线性变换

 第四步,将第二步处理后的图像与第三步处理后的图像按指定权重相加。从而实现图像的混合。

nice = cv.add(ob_select*0.8, bg_select).astype(np.uint8)
show(nice)

 python图像处理实战(二)—二值化图像与线性变换

 文章来源地址https://www.toymoban.com/news/detail-465290.html

 

到了这里,关于python图像处理实战(二)—二值化图像与线性变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于opencv的c++图像处理(图像二值化)

    基于opencv的c++接口,实现常用的图像二值化方法,包括了最大类间方差法(OTSU)、固定化阈值以及自适应阈值。 该函数将固定级别的阈值应用于多通道阵列。该函数通常用于从灰度图像中获取双层(二进制)图像(#compare 也可用于此目的)或用于去除噪声,即过滤掉值过小

    2024年02月07日
    浏览(33)
  • 【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

      在计算机中用一般用 M x N 的矩阵来表示一幅尺寸大小为 M x N 的数字图像,矩阵元素的值就是该图像对应位置上的像素值。    对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。 1、灰度图:   灰度图是每个像素只有一

    2024年04月14日
    浏览(37)
  • FPGA|数字图像处理实现口罩识别——二值化

    【写在前面】刚入门小菜鸟,记录一下口罩识别学习过程。参考文件和网址会在文末注明。有错误欢迎指出,也欢迎进行补充~ 原理图如下,二值化对应为红框里的部分 使用的二值化方法是 手动指定一个 阈值 ,通过阈值来进行二值化处理 。(还有一种方法是一个自适应阈值

    2023年04月11日
    浏览(34)
  • OpenCV常用功能——灰度处理和图像二值化处理

    1.1 cvtColor函数 函数原型: 功能 :转换图像颜色空间。 参数 : src: 输入图像。 code: 颜色空间转换代码。可以取常量cv2.COLOR_BGR2GRAY或cv2.COLOR_RGB2GRAY。 dst: 输出图像。 dstCn: 输出图像的通道数,如果设置为0,则跟随转换代码自动设置。 内置函数示例代码: 灰度处理的原理是将

    2024年02月08日
    浏览(47)
  • C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例

      本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行局部二值化处理。 目录 图像二值化原理 局部二值化 自适应阈值 实例 效果

    2024年02月13日
    浏览(38)
  • C#使用OpenCv(OpenCVSharp)图像全局二值化处理实例

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行全局二值化处理。 目录 图像二值化原理 函数原型 参数说明 实例 效果

    2024年02月13日
    浏览(34)
  • 二、FPGA实时图像处理(灰度转换、高斯滤波、二值化和边缘检测)

    基于图像实时采集系统实现图像处理 算法:采用精度为7的心理学公式:Gray = R 0.299 + G 0.587 + B 0.114, Gray = R 38 + G 75 + B 15 7 采用sobel算子进行边缘检测。 可以通过参数定义修改二值化和边缘检测阈值,以及控制是否进行图像处理和图像处理类型选择。 高斯滤波效果不明显不做演

    2024年02月11日
    浏览(37)
  • 图像二值化处理(全局阈值 自适应阈值 手动阈值操作以及直方图画法)

    图像二值化就是把让图像的像素点只有0和1(只有黑白两各种颜色,黑是背景,白是前景),关键点是寻找一个阈值T,使图像中小于阈值T的像素点变为0,大于T的像素点变为255。下面介绍的就是寻找一个图像的阈值T的方法。(主要根据直方图) retval:返回的阈值(double类型)

    2024年02月08日
    浏览(41)
  • (数字图像处理MATLAB+Python)第九章图像形态学运算-第三节:二值图像的形态学处理

    形态滤波 :是一种在数字图像处理中常用的图像处理技术,用于改善图像的质量、提取图像的特定特征或去除图像中的噪声。形态滤波主要基于形态学运算,通过结构元素(也称为模板)对图像进行局部区域的操作,从而改变图像的形状和结构。选择不同形状(如各向同性的

    2024年02月08日
    浏览(34)
  • 利用Python实现图像的二值化

       目录 1、全局阈值法 1.1主要函数: 1.2全局阈值的代码实现 1.3特点 2、自适应阈值法 2.1主要函数: 2.2实现代码: 2.3特点: 3、OTSU二值化(最大类间方差法) 3.1实现代码: 3.2特点 4、实例展示 参考文献:             传统的机器视觉通常包括两个步骤:预处理和物体检测

    2024年02月03日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包