Python OpenCV图像像素数值与逻辑运算详解

Ada
Ada
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍使用Python和OpenCV库进行图像像素的数值运算(加、减、乘、除)与逻辑运算(与、或、非、异或)。通过具体代码示例展示如何对两张图片进行对应像素值的数学计算及位操作,并简要分析了黑白图与彩色图在逻辑运算中的表现差异。

数值运算

代码:


# -*- coding=GBK -*-
import cv2 as cv
 
 
# 数值运算:加减乘除
def shu_image(src11, src22):
          src = cv.add(src11, src22)  # 加 : 图像对应像素值相加,> 255 时取255
          cv.namedWindow("add",0)
          cv.resizeWindow("add", 300, 300)  # 设置播放窗口长和宽
          cv.imshow("add", src)
          src = cv.subtract(src11, src22)  # 减 : 图像对应像素值相减,< 0 时取0
          cv.namedWindow("subtract", 0)
          cv.resizeWindow("subtract", 300, 300)
          cv.imshow("subtract", src)
          src = cv.multiply(src11, src22)  # 乘 : 图像对应像素值相乘,> 255 时取255
          cv.namedWindow("multiply", 0)
          cv.resizeWindow("multiply", 300, 300)
          cv.imshow("multiply", src)
          src = cv.divide(src11, src22)  # 除 : 图像对应像素值相除,a( > 0) / 0 = 255
          cv.namedWindow("divide", 0)
          cv.resizeWindow("divide", 300, 300)
          cv.imshow("divide", src)
 
src1 = cv.imread("jueduisiwang.bmp")
src2 = cv.imread("fuchoutianshi.bmp")
 
cv.namedWindow("src1", 0)
cv.resizeWindow("src1", 300, 300)
cv.imshow("src1", src1)
 
src2 = src2[:,:30,:] # 两张图片尺寸大小要一样,不然就需要调整
cv.namedWindow("src2", 0)
cv.resizeWindow("src2", 300, 300)
cv.imshow("src2", src2)
 
shu_image(src1, src2)
cv.waitKey(0)
cv.destroyAllWindows()

结果:

逻辑运算

代码:


# -*- coding=GBK -*-
import cv2 as cv
 
 
# 逻辑运算:与或非的操作
def luo_image(src1, src2):
    src = cv.bitwise_and(src1, src2)
    cv.namedWindow("AND", 0)
    cv.resizeWindow("AND", 300, 300)
    cv.imshow("AND", src)
    src = cv.bitwise_or(src1, src2)
    cv.namedWindow("OR", 0)
    cv.resizeWindow("OR", 300, 300)
    cv.imshow("OR", src)
    src = cv.bitwise_not(src1)
    cv.namedWindow("NOR", 0)
    cv.resizeWindow("NOR", 300, 300)
    cv.imshow("NOR", src)
    src = cv.bitwise_xor(src1, src2)
    cv.namedWindow("XOR", 0)
    cv.resizeWindow("XOR", 300, 300)
    cv.imshow("XOR", src)
 
src1 = cv.imread("jueduisiwang.bmp")
src2 = cv.imread("fuchoutianshi.bmp")
 
cv.namedWindow("src1", 0)
cv.resizeWindow("src1", 300, 300)
cv.imshow("src1", src1)
 
src2 = src2[:,:30,:] # 两张图片尺寸大小要一样,不然就需要调整
cv.namedWindow("src2", 0)
cv.resizeWindow("src2", 300, 300)
cv.imshow("src2", src2)
 
 
luo_image(src1, src2)
cv.waitKey(0)
cv.destroyAllWindows()

结果(不太具有参考价值):

备注:

图像的逻辑或运算即为255减去对应通道像素值,这等同于“取反”操作(对于黑白图像,表现为黑色变为白色,白色变为黑色)。

黑白图像与同尺寸任意图像进行逻辑或运算,其效果等同于加法运算。

黑白图像与同尺寸任意图像进行逻辑与运算,则是先将黑白图像的黑白像素值互换,再与同尺寸任意图像执行加法运算。

至于彩色图像之间的逻辑运算关系,由于情况较为复杂,目前尚未完全理清。

到此这篇关于Python实现OpenCV之图像像素数值运算与逻辑运算的文章就介绍到这了,更多相关图像像素数值运算与逻辑运算内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表