python+opencv图像处理(七)
图像相减
------------------------------------我是分呀分割线
1、-法
这个比较简单,因为它是按照同一位置的两个像素值去减,只是做减法时要注意,轻易相减会引起<0的问题,用-号来减时,它是去%255得到的值来替代。
如下图,左图是上篇用加法相加得到的结果图。中间是原本组合成的一张图像。右图是前两图用-号相减得到的结果图,看起来是不是够乱...

import cv2 as cv
img1=cv.imread("E:/image/jiaresult.jpg")
img2=cv.imread("E:/image/add1.jpg")
img=img1-img2
cv.imshow("img1",img1)
cv.imshow("img2",img2)
cv.imshow("img",img)
所以,很多时候,需要自己对运算结果来进行划分。
彩色图像比较麻烦,所以我做了灰度图像的,当结果<0时,赋值为0。结果如下。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img1=cv.imread("E:/image/jiaresult.jpg",0)
img2=cv.imread("E:/image/add1.jpg",0)
img=np.zeros(img1.shape)
w,h=img1.shape
for i in range(w):
for j in range(h):
if int(img1[i][j])-int(img2[i][j])<0:
img[i][j]=0
else:
img[i][j]=int(img1[i][j])-int(img2[i][j])
cv.imshow("img1",img1)
cv.imshow("img2",img2)
cv.imshow("img",img)
2、subtract()相减
这是opencv自带的函数,当相减的值<0时,它会自动赋值为0.
如下图所示,右图即为结果图,可看到,背景部分,由于全是白色,255-255以后变成了0,所以图中背景部分全为0.其余部分根据相减的结果显示出来,至少,还是有个形状在了。

其代码如下:
import cv2 as cv
img1=cv.imread("E:/image/jiaresult.jpg")
img2=cv.imread("E:/image/add1.jpg")
img=cv.subtract(img2,img1)
cv.imshow("img1",img1)
cv.imshow("img2",img2)
cv.imshow("img",img)
如果反过来,用subtract(img2,img1),得到的结果是不一样的,如下图所示。

3、利用图像加减法进行图像强度增强

