数字图像处理–图像算术操作

数字图像处理–图像算术操作

主要内容

(1)对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题;
(2)对一副图像进行灰度变化,实现图像的变亮、变暗,在同一个窗口内分成三个子窗口来分别显示,注上文字标题;显示三幅图的直方图。

源程序

上代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

#灰度变暗函数
def an(mylist):
    for i in range(len(mylist)):
        for each in range(len(mylist[i])):
            #mylist[i][each] = mylist[i][each] - 100
            if mylist[i][each] - 100 < 0:
                mylist[i][each] = 0
            else:
                mylist[i][each] = mylist[i][each] - 100
#灰度变亮函数
def liang(mylist):
    for i in range(len(mylist)):
        for each in range(len(mylist[i])):
            #mylist[i][each] = mylist[i][each] +50
            if mylist[i][each] + 50 > 255:
                mylist[i][each] = 255
            else:
                mylist[i][each] = mylist[i][each] + 50

#读取图片和缩放图片
img_1=cv2.imread('1.png')
img_2=cv2.imread('3.png')
print('img_1_shape:',img_1.shape)
print('img_1:',img_1)
print('**************************')
print('img_2_shape:',img_2.shape)
print('img_2:',img_2)

#两张图片  相加运算
img_add=cv2.add(src1=img_1,src2=img_2)
print('img_add_shape:',img_add.shape)
print('img_add:',img_add)

#两张图片   相减运算
img_sub=cv2.subtract(src1=img_1,src2=img_2)
print('img_sub_shape:',img_sub.shape)
print('img_sub:',img_sub)


#两张图片  相乘运算
img_mul=cv2.multiply(src1=img_1,src2=img_2)
print('img_mul_shape:',img_mul.shape)
print('img_mul:',img_mul)

#两张图片  相除运算
img_div=cv2.divide(src1=img_1,src2=img_2)
print('img_div_shape:',img_div.shape)
print('img_div:',img_div)


print('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
#读取灰度图像2.png
gray = cv2.imread('2.png',cv2.IMREAD_GRAYSCALE)
print(gray.shape)
print('gray',gray)
print('============================')

#绘图
#设置画布标题字体为中文,不设置的话,可能会出现乱码结果
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False

#创建画布,添加标题
plt.gcf().canvas.manager.set_window_title('玫瑰&茉莉花')
plt.gcf().suptitle("玫瑰花&茉莉花")

img_rose = img_1[:,:, ::-1]
img_molly = img_2[:,:,::-1]
img_A = cv2.cvtColor(img_add,cv2.COLOR_BGR2RGB)
img_S = cv2.cvtColor(img_sub,cv2.COLOR_BGR2RGB)
img_M = cv2.cvtColor(img_mul,cv2.COLOR_BGR2RGB)
img_D = cv2.cvtColor(img_div,cv2.COLOR_BGR2RGB)


plt.subplot(231), plt.imshow(img_rose), plt.title("原图-玫瑰花")
plt.subplot(232), plt.imshow(img_molly), plt.title("原图-茉莉花")
plt.subplot(233), plt.imshow(img_A), plt.title("加法")
plt.subplot(234), plt.imshow(img_S), plt.title("减法")
plt.subplot(235), plt.imshow(img_M), plt.title("乘法")
plt.subplot(236), plt.imshow(img_D), plt.title("除法")

plt.figure(2)

#变暗处理
gray_an = gray.copy()
an(gray_an)
print('gray_an_shape',gray_an.shape)
print('gray_an:',gray_an)

#变亮处理
gray_liang = gray.copy()
liang(gray_liang)
print('gray_liang_shape',gray_liang.shape)
print('gray_liang:',gray_liang)



plt.gcf().canvas.manager.set_window_title('灰度图&直方图')
plt.gcf().suptitle('灰度图&直方图')
plt.subplot(231),plt.imshow(gray,cmap='gray'),plt.title('原灰度图')
plt.subplot(232),plt.imshow(gray_an,cmap='gray'),plt.title('变暗')
plt.subplot(233),plt.imshow(gray_liang,cmap='gray'),plt.title('变亮')
plt.subplot(234),plt.hist(gray.ravel(),256),plt.title('原图——直方图')
plt.subplot(235),plt.hist(gray_an.ravel(),256),plt.title('变暗——直方图')
plt.subplot(236),plt.hist(gray_liang.ravel(),256),plt.title('变亮——直方图')


plt.show()

print('total  pixels :',len(gray.ravel()))

实现结果

2.1 读取两张原图img_1和img_2,用以实现加、减、乘、除运算。从下图可以看出img_1和img_2的部分像素矩阵。

img_1、img_2像素矩阵
在这里插入图片描述
对上述img_1和img_2实现加、减、乘、除运算并通过下图,即可发现如果在溢出取值范围(0,255)后,将会采用取0或取255操作。
依次为加、减、乘、除
在这里插入图片描述
在这里插入图片描述
上图所示矩阵生成图像,如下图所示。
在这里插入图片描述

2.2 图像的灰度变换。变暗和变亮后生成的像素矩阵如下图所示。
原灰度图、变暗后图像、变亮后图像
在这里插入图片描述

上图所示矩阵生成图像以及其相对应的直方图如下图所示。
灰度图&直方图
在这里插入图片描述
学习记录,望批评指正

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
作为函数
< <上一篇
下一篇>>