不多說,直接上代碼:
# -*- coding:utf-8 -*-# 圖像上的算數運算# 目標:# 學習圖像上的算術運算,加法、減法、位運算# 主要函數:cv2.add()、cv2.addWeighted()等import cv2import numpy as np# 圖像上的加法# 大致有兩種:# cv2.add():這是一個飽和操作# +:這是Numpy中的運算,之一種模操作,res = img1 + img2# 注意兩幅圖片的大小類型必須一致,或者第二個圖象是一個標量# 由于兩者的差別,我們一般多用cv2.add(src1, src2)## x = np.uint8([250])# y = np.uint8([10])## PRint x+y# print cv2.add(x,y)# # [4] 解釋:(250+10)%255 這是模運算# # [[255]] 解釋:(250+10)>255?255:(250+10) 這是飽和運算# 圖像的混合# 原理:也是加法,只是權重不同,給人一種混合的或者透明的感覺# 公式:g(x) = (1-a)*f0(x) + a*f1(x) a→(0,1)不同的a值可以實現不同的效果# dist = a*img1+(1-a)*img2+y cv2.addWeighted(img1, a, img2, (1-a), y)# img1 = cv2.imread("01.jpg")# img2 = cv2.imread("02.jpg")## if img1.size == img2.size and img1.dtype == img2.dtype:# res = cv2.addWeighted(img1, 0.5, img2, 0.5, 5)# cv2.namedWindow("show", cv2.WINDOW_NORMAL)# cv2.imshow("show", res)# if cv2.waitKey(0) == 27:# cv2.destroyAllWindows()# # 效果很贊# 按位運算# 問題:如何將一個圖放到另一個圖上去,加法會改變顏色,混加會透明# 解決:按位運算# img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_COLOR)# img1 = cv2.imread("01.jpg")# img2 = img[120:320, 300:450]## rows, cols, channels = img2.shape# roi = img1[0:rows, 0:cols]## gray_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) # 將圖片灰度化# ret, mask = cv2.threshold(gray_img2, 175, 255, cv2.THRESH_BINARY) # 不了解# mask_inv = cv2.bitwise_not(mask) # 按位運算# img1_bg = cv2.bitwise_and(roi, roi, mask = mask) # 同上# 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("show", img2_fg)# cv2.waitKey(0)# cv2.destroyAllWindows()# 練習:創建一個幻燈片,來演示如何將一幅圖平滑轉換到另一幅圖,使用函數cv2.addWeighted()import timestep_list = [0.02 * x for x in range(0, 51)]img1 = cv2.imread("01.jpg")img2 = cv2.imread("02.jpg")cv2.imshow("show", img1)for i in step_list: res = cv2.addWeighted(img1, i, img2, (1-i), 0) cv2.imshow("show", res) cv2.waitKey(60)if cv2.waitKey(0) ==27: # 按'Esc'退出 cv2.destroyAllWindows()# ret, mask = cv2.threshold(gray_img2, 175, 255, cv2.THRESH_BINARY) # 不了解我不是很了解,望解答(自勉)這次把兩張圖片也上傳
|
新聞熱點
疑難解答