opencv图像上的算术运算

图像上的算术运算

图像加法(推荐用opencv的函数)

#opencv中的加法与Numpy中的加法是不一样的。opencv的加法是一种饱和操作,而Numpy中的加法模操作
x=np.uint8([250])
y=np.uint8([10])
print (cv2.add(x,y))#[[255]] 250+10=260=>255
print (x+y)#[4]250+10=160%256=4

图像混合

#图像混合,图像大小要相同
#dst=x1*img1+x2*img2+b
#cv2.addWeighted(img1,x1,img2,x2,b)
img1=cv2.imread('D:\BaiduNetdiskDownload\one.jpg',1)
img2=cv2.imread('D:\BaiduNetdiskDownload\two.jpg',1)
#cv2.imshow('img1',img1)
print(img.shape)
print(img1.shape)
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)
#cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindow()

按位运算


img1=cv2.imread('D:\BaiduNetdiskDownload\messi5.jpg')
img2=cv2.imread('D:\BaiduNetdiskDownload\opencv_logo.png')

rows,cols,channels=img2.shape
print(img1.shape)
print(img2.shape)
roi=img1[0:rows,0:cols]
cv2.imshow('roi',roi)

cv2.imshow('img1',img1)
#制造mask 
img2gray=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)#灰度图
cv2.imshow('img2gray',img2gray)
#mask:二值化后的图像(黑白)
#threshold:固定阈值二值化,src: 输入图,只能输入单通道图像,通常来说为灰度图;  thresh:阈值 ;maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值; type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
ret,mask=cv2.threshold(img2gray,175,255,cv2.THRESH_BINARY)#固定阈值二值化
#cv2.imshow('mask',mask)
mask_inv=cv2.bitwise_not(mask)#1-0;0-1#非运算
cv2.imshow('mask_inv',mask_inv)
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
cv2.imshow('img1_bg',img1_bg)
img2_fg=cv2.bitwise_and(img2,img2,mask=mask_inv)
dst=cv2.add(img1_bg,img2_fg)
img1[0:rows,0:cols]=dst
#cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

颜色替换 cv2.floodFill()

'''
#颜色替换
def fill_color_demo(image):
    copyImg=image.copy()
    h,w=image.shape[:2]
    mask=np.zeros([h+2,w+2],np.uint8)
    # 参数:1原图,2mask图,3起始点,4填充的颜色 5起始点值减去该值作为最低值,6起始点值加上该值作为最高值,7彩色图模式,最高值与最低值之间是填充的颜色
    cv2.floodFill(copyImg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv2.FLOODFILL_FIXED_RANGE)
    cv2.imshow('fill_binary',copyImg)
fill_color_demo(img)


def fill_binary():
    image = np.zeros([400, 400, 3], np.uint8)
    image[100:300, 100:300, :] = 255
    cv2.imshow("fill_binary", image)

    mask = np.ones([402, 402, 1], np.uint8)
    mask[101:301, 101:301] = 0
    #FLOODFILL_MASK_ONLY - 如果设置为这个标识符的话,函数不会去填充改变原始图像 (也就是忽略第三个参数), 而是去填充掩模图像(mask)。
    #mask的指定的位置为零时才填充,不为零不填充
    cv2.floodFill(image, mask, (100, 100), (100, 2, 255), cv2.FLOODFILL_MASK_ONLY)
    cv2.imshow("filled binary", image)
fill_binary()    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值