python图像运算、图像融合

文章目录

    • 图像加法运算
    • 图像减法运算
    • 图像与运算
    • 图像或运算
    • 图像异或运算
    • 图像非运算
    • 图像融合
    • 获取图像ROI区域
    • 图像类型转换
    • 报错解决

图像加法运算

cv2.add(src1,src2,dst,…)

  • src1:第一幅图像
  • src2:第二幅图像
  • dst:要输出的图像–必须与输入的图像具有相同的大小和通道数
    当两幅图像像素值相加结果小于等于255时,输出图像直接赋值该结果,如果相加值大于255,赋值255
import cv2
d=cv2.imread('d.jpg')
e=cv2.imread('e.jpg')
result=cv2.add(d,e)
cv2.imshow('d',d)
cv2.imshow('e',e)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()

图像减法运算

cv2.subtract(src1,src2,dst,…)

  • src1:第一幅图像
  • src2:第二幅图像
  • dst:要输出的图像–必须与输入的图像具有相同的大小和通道数
import cv2
import numpy as np
img = cv2.imread('a.jpg')
x=np.ones(img.shape,dtype='uint8')*100
#图像各像素减100
result=cv2.subtract(img,x)
cv2.imshow('original',img)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()

图像与运算

cv2.bitwise_and(src1,src2,dst,…)

  • src1:第一幅图像
  • src2:第二幅图像
  • dst:要输出的图像–必须与输入的图像具有相同的大小和通道数
import cv2
import numpy as np
img = cv2.imread('e.jpg')
row,col=img.shape[:2]
c=cv2.imread('d.jpg')
cv2.circle(c,(row//2,col//2),100,255,-1)
result=cv2.bitwise_and(img,c)
cv2.imshow('c',img)
cv2.imshow('circle',c)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()

图像或运算

cv2.bitwise_or(src1,src2,dst,…)

  • src1:第一幅图像
  • src2:第二幅图像
  • dst:要输出的图像–必须与输入的图像具有相同的大小和通道数
import cv2
import numpy as np
img = cv2.imread('e.jpg')
row,col=img.shape[:2]
c=cv2.imread('d.jpg')
cv2.circle(c,(row//2,col//2),100,255,-1)
result=cv2.bitwise_or(img,c)
cv2.imshow('c',img)
cv2.imshow('circle',c)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()

图像异或运算

cv2.bitwise_xor(src1,src2,dst,…)

  • src1:第一幅图像
  • src2:第二幅图像
  • dst:要输出的图像–必须与输入的图像具有相同的大小和通道数
import cv2
import numpy as np
img = cv2.imread('e.jpg')
row,col=img.shape[:2]
c=cv2.imread('d.jpg')
cv2.circle(c,(row//2,col//2),100,255,-1)
result=cv2.bitwise_xor(img,c)
cv2.imshow('c',img)
cv2.imshow('circle',c)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()

图像非运算

cv2.bitwise_not(src1,src2,dst,…)

  • src1:第一幅图像
  • src2:第二幅图像
  • dst:要输出的图像–必须与输入的图像具有相同的大小和通道数
import cv2
import numpy as np
img = cv2.imread('e.jpg')
result=cv2.bitwise_not(img)
cv2.imshow('c',img)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()

图像融合

cv2.addWeighted(src1,alpha,src2,beta,gamma)

  • src1:第一幅图像
  • alpha:系数1
  • src2:第二幅图像
  • beta:系数2
  • gamma:亮度调节
    图像融合=图像1系数1+图像2系数2+亮度调节
import cv2
import numpy as np
img = cv2.imread('e.jpg')
d=cv2.imread('d.jpg')
result=cv2.addWeighted(img,0.6,d,0.5,0.5)
cv2.imshow('e',img)
cv2.imshow('d',d)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()

获取图像ROI区域

import cv2
import numpy as np
img=cv2.imread('e.jpg')
imgd=cv2.imread('d.jpg')
a=np.zeros((200,200,3))
#通过像素矩阵获取ROI区域
a=img[150:350,150:350]
imgd[100:300,100:300]=a
cv2.imshow('a',imgd)
cv2.waitKey(0)
cv2.destoryAllWindows()

python图像运算、图像融合_第1张图片

图像类型转换

cv2.cvtColor(src,code,dst,…)

  • src:输入的需要进行颜色空间转换的图像
  • code:转换的代码或标识
import cv2
img=cv2.imread('d.jpg')
result1=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
result2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
result3=cv2.cvtColor(result2,cv2.COLOR_GRAY2BGR)
cv2.imshow('img',img)
cv2.imshow('r1',result1)
cv2.imshow('r2',result2)
cv2.imshow('r3',result3)
cv2.waitKey(0)
cv2.destoryAllWindows()

python图像运算、图像融合_第2张图片

报错解决

  • 在对图像做加法运算的时候,一直报cv2.error,找了很多解决办法都没用,最后发现竟然是两张图片大小不一导致,将图片大小改为一致,则成功运行
  • 显示图片没有shape属性,看了很多办法发现我们都没有这个问题,最后卸载opencv重新安装,问题解决
  • cv2.error: OpenCV(4.5.3) error: (-5:Bad argument) in function ‘circle‘报错
  • cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\arithm.cpp:214

你可能感兴趣的:(python图像处理,python,opencv)