敞开成长之旅!这是我参加「日新方案 12 月更文应战」的第11天,点击查看活动概况

图画像素运算

  • 算术运算
    • 加,减,乘,除
    • 使用:调节亮度,调整对比度
  • 逻辑运算
    • 与,或,非
    • 使用:遮罩层操控
  • 改变对比度,亮度

图片读入程序中后,是以numpy数组存在的。因而对numpy数组的全部功用,对图片也适用。对数组元素的拜访,实际上就是对图片像素点的拜访。

彩色图片拜访方式为:img[i,j,c]

i表明图片的行数,j表明图片的列数,c表明图片的通道数(RGB三通道别离对应0,1,2)。坐标是从左上角开始。

灰度图片拜访方式为:gray[i,j]

1.算术运算

两张形状巨细完全相同的图进行加减乘除,假如图画巨细不一致,会报错,能够经过cv2.resize函数裁剪图片到同一个尺度,原图如下

OpenCV基础 | 1.像素运算
OpenCV基础 | 1.像素运算

    • 两张图片的各个像素点的通道值相加

    • 黑为0,白为255,像素值相加后得到新的像素值,假如像素值成果超越255,进行截断,最终成果还是255,即为白色

      import cv2
      p = cv2.imread('./python1.jpg')m = cv2.imread('./matlab.jpg')
      dst = cv2.add(p, m)cv2.imshow("add_demo", dst)cv2.waitKey(0)
      
    • 使用:去除叠加性噪声 ,生成图画叠加作用

OpenCV基础 | 1.像素运算

    • 两张图片各个像素点的通道值相减

    • 黑为0,白为255,假如相减后像素值为负值,而范围是0-255,因而取0,即为黑;

      import cv2
      p = cv2.imread('./python1.jpg')m = cv2.imread('./matlab.jpg')
      dst = cv2.subtract(p, m)cv2.imshow("add_demo", dst)cv2.waitKey(0)
      
    • OpenCV基础 | 1.像素运算

    • 使用:显示两幅图画的差异,检测同一场景 两幅图画之间的变化;图画分割,如分割运动的车辆,减法去掉停止的部分,剩余的是运动元素和噪声。

    • 两张图片各个像素点的通道值相乘

    • 黑为0,0*图二中任意的一个像素值为0,为黑,因为python图都是白色居多,弄个求反图片变黑,python图外边框是反锯齿的(边际柔化),有含糊的,并不一定都为0,因而相乘之后会出现那种像烟花的边边

      import cv2
      p = cv2.imread('./python1.jpg')m = cv2.imread('./matlab.jpg')
      dst = cv2.multiply(255-p, m)cv2.imshow("demo", dst)cv2.waitKey(0)
      
    • OpenCV基础 | 1.像素运算

    • 使用:图画的局部显示,用二值模板图画与原图画做乘法

    • 两张图片各个像素点的通道值相除

    • 使用少

      import cv2
      p = cv2.imread('./python1.jpg')m = cv2.imread('./matlab.jpg')
      dst = cv2.divide(p, 255-m)cv2.imshow("demo", dst)cv2.waitKey(0)
      
    • OpenCV基础 | 1.像素运算

2.逻辑运算

    • 全1得1

      import cv2
      p = cv2.imread('./python1.jpg')m = cv2.imread('./matlab.jpg')
      dst = cv2.bitwise_and(p, m)cv2.imshow("demo", dst)cv2.waitKey(0)
      
    • OpenCV基础 | 1.像素运算

    • 相当于一个mask

    • 使用:求两个子图的相交子图

    • 有1得1

      import cv2
      p = cv2.imread('./python1.jpg')m = cv2.imread('./matlab.jpg')
      dst = cv2.bitwise_or(p, m)cv2.imshow("demo", dst)cv2.waitKey(0)
      
    • OpenCV基础 | 1.像素运算

    • 使用:合并图片

    • 0得1,1得0 ,针对的是一张图,等效于255-p

      import cv2
      p = cv2.imread('./python1.jpg')m = cv2.imread('./matlab.jpg')
      dst = cv2.bitwise_not(p)cv2.imshow("demo", dst)cv2.waitKey(0)
      
    • OpenCV基础 | 1.像素运算

    • 使用:获得图片的补图

3.改变对比度,亮度

defcontrast_brightness_demo(image,c,b):
h,w,ch=image.shape
#初始化一张黑图
blank=np.zeros([h,w,ch],image.dtype)
#图画混合,c,1-c为这两张图片的权重
dst=cv.addWeighted(image,c,blank,1-c,b)
cv.imshow("contrast_brightness_demo",dst)

src=cv.imread("./images/lena.jpg")
#对比度1.2,亮度100
contrast_brightness_demo(src,1.2,100)

成果如下:

OpenCV基础 | 1.像素运算
OpenCV基础 | 1.像素运算