python+opencv系列教程(6)——像素运算1

  • A+
所属分类:大数据

1     原理

一幅图像即三维数组,多幅图像长宽完全一致时,便可以进行像素互相运算。

2     代码

  1. import cv2 as cv
  2. def add_demo(m1, m2):  # 相加
  3.     dst = cv.add(m1, m2)
  4.     cv.imshow("add demo", dst)
  5. def subtract_demo(m1, m2):  # 相减
  6.     dst = cv.subtract(m1, m2)
  7.     cv.imshow("subtract demo", dst)
  8. def divide_demo(m1, m2):  # 相除
  9.     dst = cv.divide(m1, m2)
  10.     cv.imshow("divide demo", dst)
  11. def multiply_demo(m1, m2):  # 相乘
  12.     dst = cv.multiply(m1, m2)
  13.     cv.imshow("multiply demo", dst)
  14. def others(m1, m2):
  15.     M1, dev1 = cv.meanStdDev(m1)
  16.     M2, dev2 = cv.meanStdDev(m2)
  17.     print(M1)
  18.     print(M2)
  19.     print(dev1)
  20.     print(dev2)
  21. print("start")
  22. src = cv.imread("C:/Users/Admin/Desktop/1.jpg")  # 读取图像
  23. src2 = cv.imread("C:/Users/Admin/Desktop/2.jpg")  # 读取图像
  24. print(src.shape)
  25. print(src2.shape)
  26. cv.imshow("input image1", src)  # 显示图片到特定的窗口中
  27. cv.imshow("input image2", src2)  # 显示图片到特定的窗口中
  28. add_demo(src2, src)
  29. subtract_demo(src2, src)
  30. divide_demo(src2, src)
  31. multiply_demo(src2, src)
  32. others(src2, src)
  33. cv.waitKey(0)  # 等待用户操作,0为一直等待,5000为等待用户操作5s
  34. cv.destroyAllWindows()  # 释放所有内存

3     讲解

  • 从print("start")开始,读取两幅长宽一样的图像,并显示;
  • add_demo函数负责将两幅图像的对应像素值相加,黑色部分像素值为0,超过255截取为255,所以结果图中形成了两幅图重叠的效果
  • subtract_demo函数负责将两幅图像的对应像素值相减,黑色部分像素为0,减后不足0,截取数值为0,白色部分为255,减去后形成彩色的“OpenCV”字样
  • divide_demo函数负责将两幅图像的对应像素值相除,除后结果数值非常小,所以效果图中基本为黑色
  • multiply_demo函数负责将两幅图像的对应像素值相乘,黑色部分为0,乘后还是为0,白色部分乘后超过255,截取为255,结果图中毛边的原因是因为原“OpenCV”字样为了达到光滑的效果,做了抗锯齿处理,其实字符周围的像素并非为0,是很小的像素值,相乘后,数值扩大,形成毛边。

python+opencv系列教程(6)——像素运算1

  • others函数负责计算两幅图像的均值和方差,M1、M2为均值,dev1、dev2为方差,从结果中可以看出,字符图片均值小(因为以黑色为主),方差小(色彩单调);风景图均值大(色彩明亮),方差大(色彩丰富)。

python+opencv系列教程(6)——像素运算1

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!