通道分离与合并、彩色图转换为灰度图、二值化
创始人
2024-01-16 17:35:11
0

文章目录

  • 图像基础
  • 重要的函数
  • 图像基本知识
    • 图像基础
    • 通道分离与合并
    • 彩色图转换为灰度图
    • 二值化
    • 图像的加减乘除

图像基础

  • 矩阵
  • 分辨率
  • 8位整型图像
  • 浮点数图像

现在简单介绍下二值化、灰度图以及真彩色和假彩色

  1. 图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化。
  2. 灰度图,又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶。用灰度表示的图像称作灰度图。除了常见的卫星图像、航空照片外,许多地球物理观测数据也以灰度表示。
  3. 真彩色是指在组成一幅彩色图像的每个像素值中,有R、G、B三个基色分量,每个基色分量直接决定显示设备的基色强度产生彩色。真彩色图像就是我们平时见到的可见光R、G、B,3个波段对应生成R、G、B3个通道的图像。
  4. 假彩色图像也是3通道的,但是它的3个通道不再是RGB3个波段的信息,而是用其他的波段来组成的3通道图像

在这里插入图片描述
灰度图:
在这里插入图片描述
彩色图:

在这里插入图片描述

对于彩色的图像的处理,主要包括:通道分离与合并、 彩色图转灰度图、二值化图像

  1. 通道分离与合并
b, g, r = cv.split(img)
img_new = cv.merge([b, g, r])
  1. 彩色图转灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
  1. 二值化图像
_, img_bin = cv.threshold(img_gray, th1, th2, cv.THRESH_BINARY)

图像运算指以图像为单位进行的擦欧总、该操作对图像中的所有像素同样进行,运算的结果是一幅其灰度分布与原来参与运算图像灰度分布不同的新图像。具体的运算主要包括算术和逻辑运算,它们通过改变像素的值来得到图像增强的效果。

  1. 图像运算
img = cv.add(img1, img2)
img = cv.addWeighted(img1, alpha, img2, beta, gamma)
img = cv.subtract(img1, img2)
img = cv.multiply(img1, img2)
img = cv.divide(img1, img2)
  1. 图像像素非线性变换
img = cv.convertScaleAbs(img, alpha=1, beta=0)

s=b+krs = b + kr s=b+kr

s=a+ln(r+1)bs = a + \frac{ln(r+1)}{b} s=a+bln(r+1)​

s=crγs = cr^\gamma s=crγ

重要的函数

  1. 图像读取
img = cv.imread()
  1. 彩色图转灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
  1. 二值化图像(灰度图转二值图)
_, img_bin = cv.threshold(img_gray, th1, th2, cv.THRESH_BINARY)
  1. 保存图像
cv.imwrite('pic/bear_gray.jpg', img_gray)
  1. 通道分离
b, g, r = cv.split(img)
  1. 通道合并
img_new = cv.merge([b, g, r])
  1. 两图像相加、相减、相乘、相除
img = cv.add(img1, img2)
img = cv.subtract(img1, img2)
img = cv.multiply(img1, img2)
img = cv.divide(img1, img2)

图像基本知识

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def show(img):if img.ndim == 2:plt.imshow(img, cmap='gray',vmin=0,vmax=255)else:plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))#cv用的BGR,需要转换为RGBplt.show()

图像基础

A = np.random.randint(0,256,(2,4))
A
array([[  4, 245, 223, 220],[191, 208, 190,  72]])
show(A)

在这里插入图片描述

B = np.random.randint(0,256,(2,4,3),dtype=np.uint8)
B
array([[[240,  57,  37],[141,  33, 113],[ 50, 252,   5],[125,  23, 206]],[[ 94, 128, 166],[218, 183, 231],[156, 136, 105],[208, 191, 119]]], dtype=uint8)

uint8为8位无符号整数类型,表示范围为[0, 255]

show(B)

在这里插入图片描述

A2 = np.float32(A)
A2 /= 255
show(A2)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IreIgOD4-1662470402352)(output_13_0.png)]

通道分离与合并

读取图片

img = cv.imread('./pic/cubic500x500.jpg')
show(img)

在这里插入图片描述

通道分离

b,g,r = cv.split(img)
show(r)

在这里插入图片描述

img.shape
(500, 500, 3)

通道合并

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

在这里插入图片描述

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

在这里插入图片描述

彩色图转换为灰度图

将三个通道进行加权

gray1 = 1/3*b + 1/3*g + 1/3*r
gray1 = np.uint8(gray1)# 或者gray1 = gray1.astype(np.uint8)

利用cv现成的api

gray4 = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
show(gray4)

在这里插入图片描述

二值化

thresh = 125
gray4[gray4 > thresh] = 255
gray4[gray4 <= thresh] = 0
show(gray4)

在这里插入图片描述

利用cv.threshold来进行二值化

show(gray1)

在这里插入图片描述

_, img_bin = cv.threshold(gray1, 125, 255, cv.THRESH_BINARY)
show(img_bin)

在这里插入图片描述

图像的加减乘除

  • 相加:混合图像、添加噪声cv.add()

  • 相减:消除背景、差影法(比较差异、运动跟踪)cv.subtract()

  • 相乘:掩膜 cv.multiply()

  • 相除:校正设备、比较差异 cv.divide()

np.hstack将参数元组的元素数组按水平方向进行叠加

np.vstack将参数元组的元素数组按垂直方向进行叠加

接下来,我们进行代码的实现

obj = cv.imread('./pic/hedgehog500x500.jpg',0)
bg = cv.imread('./pic/line500x500.jpg',0)
mask = cv.imread('./pic/mask500x500.jpg',0)
noise = cv.imread('./pic/hedgehog_noise_500x500.jpg',0)
show(np.hstack([obj,bg,mask,noise]))

在这里插入图片描述

接下来,我们呢可以图像相加以及图像相减的效果:

图像相加:

img_add = obj + bg
show(img_add)

在这里插入图片描述

显然得到的图,并不是我们想要的,这是因为img_add = obj + bg,两个图的RGB元素相加超过了255时,会重新循环到另外一个值,我们只需要两者都取权重0.5,就可以避免这样的问题

img_add = obj*0.5 + bg*0.5 #img_add = cv.add(obj*0.5,bg*0.5)
show(img_add)

在这里插入图片描述

print(img_add.dtype)
float64

但是这里注意,obj0.5 + bg0.5后,img_add的数据类型会自动转换为float类型,你也可以使用np.uint8()进行强制转换

但是,调用cv.addWeighted(),就不会出现这样的情况,它会自动的截断

img_add2 = cv.addWeighted(obj,0.5,bg,0.5,0)
show(img_add2)

在这里插入图片描述

图像相减:

img_sub = np.uint8((img_add - bg*0.5))
#img_sub = cv.subtract(img_add,bg*0.5)
show(np.hstack([img_sub,img_sub*2]))

在这里插入图片描述

图像乘法

# mask /= 255
show(np.hstack([obj, mask]))

在这里插入图片描述

img_mul = cv.multiply(obj/1.0, mask/255) #cv.multiply只会对同种类型的数据相乘,因此Ob/1.0
show(img_mul) 

在这里插入图片描述

图像相除

# 图像相除
show(np.hstack([obj, ob_noise]))

在这里插入图片描述

img_div = cv.divide(obj, ob_noise+1)
show(img_div)

在这里插入图片描述

保存图片

cv.imwrite('pic/img_divide.jpg', np.hstack([obj, noise, img_div]))
True
# 实例
bg = cv.imread('pic/petal500x500.jpg')
ob = cv.imread('pic/hedgehog500x500.jpg')
mask = cv.imread('pic/mask500x500.jpg')show(np.hstack([bg, ob, mask]))

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

nice = cv.add(ob_select*0.8, bg_select).astype(np.uint8)
show(nice)
cv.imwrite('pic/image_mix.jpg', np.hstack([bg, ob, nice]))
True

相关内容

热门资讯

流浪救助新闻稿范文推荐9篇 流浪救助新闻稿范文 第一篇xx年5月19日下午。为弘扬雷锋精神,响应大学生诚信感恩教育主题要求,xx...
找规律评课稿 找规律评课稿  评课是加强教学常规管理,开展教育科研活,深化课堂教学改革,促进学生发展,推进教师专业...
学生文明表扬稿范文推荐22篇 学生文明表扬稿范文 第一篇20xx年7月25日上午,贵校新高二(8)、(9)班的名同学来到我们社区参...
鄂教版四年级下册科学《不同的... 鄂教版四年级下册科学《不同的声音》说课稿  尊敬的各位评委,各位老师:  你们好!  今天,我说课的...
小学语文课评课稿   导语:对语文教学而言,情是蕴涵在文本和生活中的情,认知是基于主体生活与心灵的认知。下面小编为你整...
盛世中国全文朗诵稿 盛世中国全文朗诵稿  在社会发展不断提速的今天,大家都接触过朗诵稿吧,朗诵,指清清楚楚的高声诵读。就...
《认识整万数》说课稿 《认识整万数》说课稿(精选8篇)  作为一名优秀的教育工作者,就有可能用到说课稿,说课稿有助于提高教...
设计的说课稿 设计的说课稿  作为一名为他人授业解惑的教育工作者,很有必要精心设计一份说课稿,编写说课稿助于积累教...
小学五年级中队长竞选稿 小学五年级中队长竞选稿尊敬的老师,亲爱的同学们:大家好!我是五年级一班的王君瑞,非常荣幸有机会参加这...
大学运动会优秀加油稿 大学运动会优秀加油稿  在当下社会,我们都可能会用到加油稿,借助加油稿可以激励他人的士气。怎样写加油...
小学三年级英语家长会教师发言... 小学三年级英语家长会教师发言稿各位家长:  大家好,很感谢各位家长在百忙中抽出时间来参加今天的家长会...
运动会加油稿鼓励语句 运动会加油稿鼓励语句  运动会的意义  运动会不仅丰富了员工的业余生活,还促进了大家相互间的交流,增...
小学语文花钟评课稿 小学语文花钟评课稿  在小学教师在听了花钟的教学之后,需要根据课中的表现写好相关的评课稿,那么应该如...
优秀家长的发言稿 优秀家长的发言稿(通用10篇)  在现在的社会生活中,发言稿对我们的作用越来越大,发言稿是作为在特定...
保险销售岗位竞聘稿范文精选8... 保险销售岗位竞聘稿范文 第一篇尊敬的公司领导、各位评委:大家好!首先非常感谢各位领导、同志们的信任和...
校园篮球赛新闻稿 校园篮球赛新闻稿5篇  在当今不断发展的世界,新闻稿与我们不再陌生,新闻稿长期以来被视为官方声明,那...
会议发言稿的格式 会议发言稿范文的格式(精选7篇)  发言稿的写法比较灵活,结构形式要求也不像演讲稿那么严格,可以根据...
《水秘密》说课稿 《水秘密》说课稿  一、说教材:  《水的秘密》是一个听说活动。水是我们生活中到处可见的物质,水与我...
盘古开天地说课稿 关于盘古开天地说课稿范文  作为一名优秀的教育工作者,时常会需要准备好说课稿,通过说课稿可以很好地改...
《自己的花是让别人看的》说课 《自己的花是让别人看的》说课范文  在教学这篇文章之前,我揣摩再三,总觉得难以入手。文章的语言之美,...