Python 計算機視覺(十五)—— 影像特效處理
"""
Author:XiaoMa
date:2021/11/16
"""
import cv2
import numpy as np
import math
import matplotlib.pyplot as plt
img0 = cv2.imread('E:\From Zhihu\For the desk\cvfifteen1.jpg')
img1 = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)
h, w = img0.shape[:2]
print(h, w)
cv2.imshow("W0", img0)
cv2.imshow("W1", img1)
cv2.waitKey(delay = 0)
# 毛玻璃特效
img2 = np.zeros((h - 6, w - 6, 3), np.uint8) # 生成的全零矩陣考慮到了隨機數範圍,變小了
for i in range(0, h - 6): # 防止下面的隨機數超出邊緣
for j in range(0, w - 6):
index = int(np.random.random()*6) #0~6 的隨機數
(b, g, r) = img0[i + index, j + index]
img2[i, j] = (b, g, r)
cv2.imshow("W2", img2)
cv2.waitKey(delay = 0)
# 浮雕特效 ( 需要對灰度影像進行操作 )
img3 = np.zeros((h, w, 3), np.uint8)
for i in range(0, h):
for j in range(0, w - 2): # 減 2 的效果和上面一樣
grayP0 = int(img1[i, j])
grayP1 = int(img1[i, j + 2]) # 取與前一個畫素點相鄰的點
newP = grayP0 - grayP1 + 150 # 得到差值,加一個常數可以增加浮雕立體感
if newP > 255:
newP = 255
if newP < 0:
newP = 0
img3[i, j] = newP
cv2.imshow("W3", img3)
cv2.waitKey(delay = 0)
# 素描特效
img4 = 255 - img1 # 對原灰度影像的畫素點進行反轉
blurred = cv2.GaussianBlur(img4, (21, 21), 0) # 進行高斯模糊
inverted_blurred = 255 - blurred # 反轉
img4 = cv2.divide(img1, inverted_blurred, scale = 127.0) # 灰度影像除以倒置的模糊影像得到鉛筆素描畫
cv2.imshow("W4", img4)
cv2.waitKey(delay = 0)
# 懷舊特效
img5 = np.zeros((h, w, 3), np.uint8)
for i in range(0, h):
for j in range(0, w):
B = 0.272 * img0[i, j][2] + 0.534 * img0[i, j][1] + 0.131 * img0[i, j][0]
G = 0.349 * img0[i, j][2] + 0.686 * img0[i, j][1] + 0.168 * img0[i, j][0]
R = 0.393 * img0[i, j][2] + 0.769 * img0[i, j][1] + 0.189 * img0[i, j][0]
if B > 255:
B = 255
if G > 255:
G = 255
if R > 255:
R = 255
img5[i, j] = np.uint8((B, G, R))
cv2.imshow("W5", img5)
cv2.waitKey(delay = 0)
# 流年特效
img6 = np.zeros((h, w, 3), np.uint8)
for i in range(0, h):
for j in range(0, w):
B = math.sqrt(img0[i, j][0]) *14 # B 通道的數值開平方乘以引數 14
G = img0[i, j][1]
R = img0[i, j][2]
if B > 255:
B = 255
img6[i, j] = np.uint8((B, G, R))
cv2.imshow("W6", img6)
cv2.waitKey(delay = 0)
# 水波特效
img7 = np.zeros((h, w, 3), np.uint8)
wavelength = 20 # 定義水波特效波長
amplitude = 30 # 幅度
phase = math.pi / 4 # 相位
centreX = 0.5 # 水波中心點 X
centreY = 0.5 # 水波中心點 Y
radius = min(h, w) / 2
icentreX = w*centreX # 水波覆蓋寬度
icentreY = h*centreY # 水波覆蓋高度
for i in range(0, h):
for j in range(0, w):
dx = j - icentreX
dy = i - icentreY
distance = dx * dx + dy * dy
if distance > radius * radius:
x = j
y = i
else:
# 計算水波區域
distance = math.sqrt(distance)
amount = amplitude * math.sin(distance / wavelength * 2 * math.pi - phase)
amount = amount * (radius - distance) / radius
amount = amount * wavelength / (distance + 0.0001)
x = j + dx * amount
y = i + dy * amount
# 邊界判斷
if x < 0:
x = 0
if x >= w - 1:
x = w - 2
if y < 0:
y = 0
if y >= h - 1:
y = h - 2
p = x - int(x)
q = y - int(y)
# 影像水波賦值
img7[i, j, :] = (1 - p) * (1 - q) * img0[int(y), int(x), :] + p * (1 - q) * img0[int(y), int(x), :]
+ (1 - p) * q * img0[int(y), int(x), :] + p * q * img0[int(y), int(x), :]
cv2.imshow("W7", img7)
cv2.waitKey(delay = 0)
# 卡通特效
num_bilateral = 7 # 定義雙邊濾波的數目
for i in range(num_bilateral): # 雙邊濾波處理
img_color = cv2.bilateralFilter(img0, d = 9, sigmaColor = 5, sigmaSpace = 3)
img_blur = cv2.medianBlur(img1, 7) # 中值濾波處理
img_edge = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize = 5, C = 2) # 邊緣檢測及自適應閾值化處理
img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB) # 轉換回彩色影像
img8 = cv2.bitwise_and(img0, img_edge) # 影像的與運算
cv2.imshow('W8', img8)
cv2.waitKey(delay = 0)
# 將所有影像儲存到一張圖中
plt.rcParams['font.family'] = 'SimHei'
imgs = [img0, img1, img2, img3, img4, img5, img6, img7, img8]
titles =外匯跟單gendan5.com [' 原圖 ', ' 灰度圖 ', ' 毛玻璃特效 ', ' 浮雕特效 ', ' 素描特效 ', ' 懷舊特效 ', ' 流年特效 ', ' 水波特效 ', ' 卡通特效 ']
for i in range(9):
imgs[i] = cv2.cvtColor(imgs[i], cv2.COLOR_BGR2RGB)
plt.subplot(3, 3, i + 1)
plt.imshow(imgs[i])
plt.title(titles[i])
plt.xticks([])
plt.yticks([])
plt.suptitle(' 影像特效處理 ')
plt.savefig('E:\From Zhihu\For the desk\cvfifteenresult.jpg', dpi = 1080)
plt.show()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2843513/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 計算機視覺 の1. 影像預處理計算機視覺
- Python影像處理丨5種影像處理特效Python特效
- 計算機視覺—影象特效(3)計算機視覺特效
- 影像處理--影像特效特效
- 計算機視覺實戰的深度學習實戰二:影像預處理計算機視覺深度學習
- FxFactory pro 8 for Mac(視覺特效處理)Mac視覺特效
- 【計算機視覺】利用GAN Prior來處理各種視覺任務計算機視覺
- OpenCV計算機視覺學習(12)——影像量化處理&影像取樣處理(K-Means聚類量化,區域性馬賽克處理)OpenCV計算機視覺聚類
- OpenCV計算機視覺學習(15)——淺談影像處理的飽和運算和取模運算OpenCV計算機視覺
- 視覺化影像處理 | 視覺化訓練器 | 影像分類視覺化
- FxFactory 8 Pro for Mac(視覺特效處理包)Mac視覺特效
- 《OpenCV 4.5計算機視覺開發實戰:基於Python》OpenCV影像處理入門書OpenCV計算機視覺Python
- Boris FX Optics for mac(影像視覺特效處理)支援Lrc2024 2024.0.1.63啟用版Mac視覺特效
- Mac視覺特效處理包——FxFactory 7 Pro for MacMac視覺特效
- webgl 影像處理 加速計算Web
- Python計算機視覺-第2章Python計算機視覺
- CV:計算機視覺基礎之影像儲存到計算機的原理daiding計算機視覺AI
- 計算機視覺中的影像標註工具總結計算機視覺
- Python 影像處理 OpenCV (9):影像處理形態學開運算、閉運算以及梯度運算PythonOpenCV梯度
- Python計算機視覺——Harris角點檢測Python計算機視覺
- [雪峰磁針石部落格]python計算機視覺深度學習2影像基礎Python計算機視覺深度學習
- Python 影像處理 OpenCV (10):影像處理形態學之頂帽運算與黑帽運算PythonOpenCV
- 淺析機器視覺在醫療影像處理中的應用視覺
- Caffe簡單例程,影像處理,Netscope視覺化方法單例視覺化
- OpenCV計算機視覺學習(4)——影像平滑處理(均值濾波,高斯濾波,中值濾波,雙邊濾波)OpenCV計算機視覺
- OpenCV計算機視覺學習(2)——影像算術運算 & 掩膜mask操作(數值計算,影像融合,邊界填充)OpenCV計算機視覺
- [計算機視覺]基於內容的影像搜尋實現計算機視覺
- 計算機視覺論文集計算機視覺
- iOS計算機視覺—ARKitiOS計算機視覺
- Python 影像處理 OpenCV (6):影像的閾值處理PythonOpenCV
- Python 影像處理 OpenCV (7):影像平滑(濾波)處理PythonOpenCV
- 論文資源: CVPR、ICCV、ECCV、IJCAI等計算機視覺、影像處理頂會頂刊歷年論文連結AI計算機視覺
- 機器視覺中常用影像處理庫都有哪些?重點關注.net視覺
- Python 影像處理 OpenCV (4):影像算數運算以及修改顏色空間PythonOpenCV
- 2024年5月計算機視覺論文推薦:包括擴散模型、視覺語言模型、影像編輯和生成、影片處理和生成以及影像識別等各個主題計算機視覺模型
- OpenCV計算機視覺學習(8)——影像輪廓處理(輪廓繪製,輪廓檢索,輪廓填充,輪廓近似)OpenCV計算機視覺
- 目標檢測和影像分類及其相關計算機視覺的影像分佈計算機視覺
- 自然語言處理(nlp)比計算機視覺(cv)發展緩慢,而且更難!自然語言處理計算機視覺