openCV基础学习札记(6)—图像上的算术运算

openCV基础学习札记(6)—图像上的算术运算

在图像处理中有两类最重要的基础操作分别是图像点操作与块操作,简单点说图像点操作就是图像每个像素点的相关逻辑与几何运算、块操作最常见就是基于卷积算子的各种操作、实现各种不同的功能。

1.图像加法

使用cv2.add()将两幅图像进行加法运算, 也可以直接使用numpy, res=img1+img2.两幅图像的大小, 类型必须一致, 或者第二个图像可以是一个简单的标量值。openCV的加法是一种饱和操作, 而numpy的加法是一种模操作。

openCV基础学习札记(6)—图像上的算术运算

原图像每个像素相加,大于255的按255处理。

原图像每个像素相减,小于0的按0处理。

2.图像混合

这也是加法, 不同的是两幅图像的权重不同, 这会给人一种混合或者透明的感觉。 图像混合的计算公式如下:

g(x) = (1-α)f0 (x)+αf1 (x)通过修改α的值( 0-->1) ,可以实现很酷的混合。例: 将两幅图像混合, 第一幅权重为0.7.第二幅权重为0.3。 函数cv2.addWeighed()可以按下面的公式对图片进行混合。

  • dst = α·img1 + β·img2+γ 这里γ的取值为0

先弄两个原图,注意要使用一样的分辨率:

openCV基础学习札记(6)—图像上的算术运算

demo1.jpg

openCV基础学习札记(6)—图像上的算术运算

demo2.jpg

openCV基础学习札记(6)—图像上的算术运算

opencv_logo.png

openCV基础学习札记(6)—图像上的算术运算

运行后的结果:

openCV基础学习札记(6)—图像上的算术运算

3.按位运算

包括按位操作有: AND, OR, NOT, XOR等。

看一个例子:

openCV基础学习札记(6)—图像上的算术运算

运行效果:

openCV基础学习札记(6)—图像上的算术运算

说明:

  1. rows,cols,channels = img2.shape

    shape返回的是图像的行数,列数,色彩通道数。

    行数其实对应于坐标轴上的y,即表示的是图像的高度

    列数对应于坐标轴上的x,即表示的是图像的宽度

    也就是说shape返回的是(高度, 宽度) = (y , x)

    注意一点:例:img[50,10]是否表示是(x,y)为(50,10)的那个像素呢,其实不是。

    与shape的原理相同,它表示的也是(y,x),即表示第50列第10行的那个元素。

2.cv2.threshold(灰度图,阈值,设定值,方法)

  • 参数方法:

    cv2.THRESH_BINARY

    cv2.THRESH_BINARY_INV

    cv2.THRESH_TRUNC

    cv2.THRESH_TOZERO

    cv2.THRESH_TOZERO_INV。

  • 作用:二值化处理,低于阈值的像素点灰度值设置为0,高于阈值的像素点的值设置为参数3。

  • ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY) 其实出来就是一个黑白图了,可以看mask那个图。

3.mask_inv = cv2.bitwise_not(mask) 对这个二值化的处理的图在去个反,就是黑变白,白变黑。可以参考图mask_inv

4.img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)

去掉ROI中的logo区域

看图:

openCV基础学习札记(6)—图像上的算术运算

5.img2_fg = cv2.bitwise_and(img2,img2,mask = mask)

在opencv_logo图片中取logo

看图:

openCV基础学习札记(6)—图像上的算术运算

6.再来一张所有的图:

openCV基础学习札记(6)—图像上的算术运算


分享到:


相關文章: