python+opencv系列教程(7)——像素运算2

  • A+
所属分类:大数据

1     原理

  • 与运算:两个二进制数,只要有一方为0,结果为0;否则为1;
  • 或运算:两个二进制数,只要有一方为1,结果为1;否则为0;
  • 取反运算:1取反结果是0;0取反结果是1.
  • addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None):

第一个参数是第一幅图像

第二个参数是第一幅图像的权重

第三个参数是第二幅图像

第四个参数是第二幅图像的权重

第五个参数是前两幅图像权重和的结果上再统一加上的数值。

2     代码

  1. import cv2 as cv
  2. import numpy as np
  3. def logic_and(m1, m2):  # 与运算
  4.     dst = cv.bitwise_and(m1, m2)
  5.     cv.imshow("logic_and", dst)
  6. def logic_or(m1, m2):  # 或运算
  7.     dst = cv.bitwise_or(m1, m2)
  8.     cv.imshow("logic_or", dst)
  9. def logic_not(m1):  # 取反运算
  10.     dst = cv.bitwise_not(m1)
  11.     cv.imshow("logic_not", dst)
  12. def cotracst_brightness_demo(image, c, b):
  13.     black = np.zeros(image.shape, image.dtype)
  14.     dst = cv.addWeighted(image, c, black, 1-c, b)
  15.     cv.imshow("cotracst_brightness_demo", dst)
  16. print("start")
  17. src = cv.imread("C:/Users/Admin/Desktop/1.jpg")  # 读取图像
  18. src2 = cv.imread("C:/Users/Admin/Desktop/2.jpg")  # 读取图像
  19. cv.imshow("input image1", src)  # 显示图片到特定的窗口中
  20. cv.imshow("input image2", src2)  # 显示图片到特定的窗口中
  21. logic_and(src, src2)
  22. logic_or(src, src2)
  23. logic_not(src2)
  24. cotracst_brightness_demo(src, 1.2, 10)
  25. cv.waitKey(0)  # 等待用户操作,0为一直等待,5000为等待用户操作5s
  26. cv.destroyAllWindows()  # 释放所有内存

3     讲解

  • 从print("start")语句开始,读取两幅图像并显示
  • logic_and(src, src2)负责进行逻辑与运算,图像数组中,每个元素为1个字节,每位都为0,则该数值显示为0;每位都为1,则数值为255。Src2图像为黑白图像,黑色部分每位都是0,取与后,该像素还是黑色;白色部分每位都是1,取与后,该像素为src的像素值。
  • logic_or(src, src2)负责逻辑或运算,黑色区域取或后为src的像素值;白色区域取或后还是白色;
  • logic_not(src2)取反运算,黑变白,白变黑,彩色取其补色;
  • cotracst_brightness_demo(src, 1.2, 10)增强图片对比度或亮度。1.2是第一幅图的权重,权重越高,第一幅图的对比度越强,10为统一增强的亮度。计算方式是第一幅图的像素*1.2+第二幅图的像素*-0.2+10就是每个对应像素的数值,由于第二幅图像是黑色的,像素值全是0,所以第二幅图像的权重结果依然是0。python+opencv系列教程(7)——像素运算2

 

阿拉灯aladeng

发表评论

您必须才能发表评论!