日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

03-图像特效

發布時間:2023/12/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 03-图像特效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、灰度處理

方法一:imread方法

彩色圖的顏色通道為3,即RGB;而灰度圖只有一個顏色通道。

import cv2 img0 = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',0) img1 = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) print(img0.shape) print(img1.shape)cv2.imshow('src',img0)#灰度圖片 cv2.waitKey(0)

結果如下:

方法二:cvtColor方法

顏色空間轉換
cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
參數一:原始待轉換數據圖片
參數二:顏色轉換方式,BGR轉GRAY

import cv2 img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#顏色空間轉換 cv2.imshow('dst',dst)#灰度圖片 cv2.waitKey(0)

效果圖如下:

方法三:灰度圖像==彩色圖像(R+G+B)/3

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] #灰度圖像的GBR都相等,為彩色照片的均值 dst1 = np.zeros((height,width,3),np.uint8)for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]gray = (int(b)+int(g)+int(r))/3dst1[i,j] = np.uint8(gray)cv2.imshow('dst1',dst1)#灰度圖片 cv2.waitKey(0)

效果圖如下:

方法四:灰度圖像==彩色圖像( R * 0.299+G * 0.587 + B * 0.114)

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] #灰度圖像的GBR都相等,為彩色照片的均值 dst2 = np.zeros((height,width,3),np.uint8)for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]gray = (int(b)*0.114+int(g)*0.587+int(r)*0.299)dst2[i,j] = np.uint8(gray)cv2.imshow('dst2',dst2)#灰度圖片 cv2.waitKey(0)

效果圖如下:

二、算法優化

1、定點計算比浮點計算快
2、加減運算比乘除運算快

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] #灰度圖像的GBR都相等,為彩色照片的均值 dst2 = np.zeros((height,width,3),np.uint8)for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]#gray = (int(b)*0.114+int(g)*0.587+int(r)*0.299)#gray = (int(b)+int(g)*2+int(r))/4#乘4除4gray = (r+(g<<1)+b)>>2#g乘2左移一位;除以4右移兩位dst2[i,j] = np.uint8(gray)cv2.imshow('dst2',dst2)#灰度圖片 cv2.waitKey(0)

效果圖如下:

三、顏色反轉

灰度圖像顏色反轉:0-255,即:255-當前值

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#灰度處理 dst = np.zeros((height,width,1),np.uint8)#這里只傳入一個顏色通道(height,width,1)當成灰度圖處理 for i in range(0,height):for j in range(0,width):grayPixel = gray[i,j]dst[i,j] = 255-grayPixelcv2.imshow('dst',dst)#灰度圖片 cv2.waitKey(0)

效果圖如下:

彩色圖像的顏色反轉:RGB每個顏色通道的像素值都需要被255減去

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros((height,width,3),np.uint8)#(height,width,1)一個像素值有三個顏色通道組成 for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]dst[i,j] = (255-b,255-g,255-r)cv2.imshow('dst',dst)#灰度圖片 cv2.waitKey(0)

效果圖如下:

四、圖片的馬賽克效果

馬賽克效果:定義馬賽克方塊,例如為10*10;將馬賽克方塊中的一個像素值去替代整個馬賽克方塊中的所有像素點

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] for i in range(100,300):for j in range(100,200):if i%10 ==0 and j%10==0 :#定義一個10*10的馬賽克方塊,用馬賽克方塊中的一個去代替整個馬賽克的像素值for m in range(0,10):for n in range(0,10):(b,g,r) = img[i,j]img[m+i,n+j] = (b,g,r)cv2.imshow('dst',img) cv2.waitKey(0)

效果圖如下:

五、圖片的毛玻璃效果

毛玻璃效果:定義毛玻璃方塊,例如為10*10;隨機生成一個像素點去依次代替毛玻璃方塊中的所有像素點

import cv2 import numpy as np import random img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros((height,width,3),np.uint8) mm = 8 for m in range(0,height-mm):for n in range(0,width-mm):index = int(random.random()*8)#隨機生成0-8這些數,去代替其他的像數值(b,g,r) = img[m+index,n+index]dst[m,n] = (b,g,r) cv2.imshow('dst',dst) cv2.waitKey(0)

效果圖如下:

六、圖片的融合效果

采用每個圖片乘以一個比例系數然后相加進行融合的方式;兩張融合的圖片的大小必須一致
cv2.addWeighted(img0ROI,0.5,img1ROI,0.5,0)
參數一:圖片1
參數二:圖片1對應的權值
參數三:圖片2
參數四:圖片2對應的權值
參數五:偏移量,一般默認設置為0

import cv2 import numpy as np img0 = cv2.imread('E:\Jupyter_workspace\study\data/water.png',1)#這兩張圖片必須大于第一張圖片的一半 img1 = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img0.shape height = imgInfo[0] width = imgInfo[1] #ROI選取一塊區域進行照片融合;且選取的大小必須比原圖像要小 roiH = int(height/2) roiW = int(width/2) img0ROI = img0[0:roiH,0:roiW] img1ROI = img1[0:roiH,0:roiW] #dst 定義目標圖片 dst = np.zeros((roiH,roiW,3),np.uint8) dst = cv2.addWeighted(img0ROI,0.5,img1ROI,0.5,0) cv2.imshow('dst',dst) cv2.waitKey(0)

效果圖如下:

七、邊緣檢測

邊緣檢測的實質就是圖像的卷積運算

調用Canny方法api實現邊緣檢測

canny邊緣檢測步驟:
1,對圖像先進行灰度處理
2,高斯濾波,除去圖像中一下噪聲的干擾
3,調用canny方法實現邊緣檢測

cv2.Canny(img,50,50)
參數一:傳入的圖片數據
參數二:如果圖片進行卷積運算之后大于該值,則認定為邊緣

import cv2 import numpy as np import randomimg = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] cv2.imshow('img',img)gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#1,轉換灰度圖像 imgG = cv2.GaussianBlur(gray,(3,3),0)#2,高斯濾波 dst = cv2.Canny(img,50,50)#3,調用Canny算法 cv2.imshow('dsr',dst) cv2.waitKey(0)

效果圖如下:

使用sobel算子用源碼方式實現邊緣檢測

soble算子的算法原理:
1,算子的模板
水平方向模板:
1 2 1
0 0 0
-1 -2 -1
豎直方向模板:
1 0 -1
2 0 -2
1 0 -1
2,圖片卷積
矩陣卷積是矩陣對應的元素相乘然后再求和,并不是矩陣相乘!!!
例如:[1,2,3,4]為原像素,計算模板為[a,b,c,d],卷積之后結果為:dst = a1+b2+c3+d4
這個dst就是所謂的梯度,也分為水平方向gx和豎直方向gy
grad = sqrt(gxgx+gygy)
3,閾值判決
grad和閾值進行判斷

import cv2 import numpy as np import random import math img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#轉換為灰度圖 dst = np.zeros((height,width,1),np.uint8)#因為處理的是灰度圖片所以參數為1 for i in range(0,height-2):#因為矩陣是3*3的,矩陣右下角坐標為2,所以要-2防溢出for j in range(0,width-2):gy = gray[i,j]*1 + gray[i,j+1]*2 + gray[i,j+2]*1 - gray[i+2,j]*1 - gray[i+2,j+1]*2 - gray[i+2,j+2]*1gx = gray[i,j]+gray[i+1,j]*2+gray[i+2,j]-gray[i,j+2]-gray[i+1,j+2]*2-gray[i+2,j+2]grad = math.sqrt(gx*gx+gy*gy)if grad>50:dst[i,j] = 255else:dst[i,j] = 0 cv2.imshow('dst',dst) cv2.waitKey(0)

效果圖如下:

八、圖片的浮雕效果

前一個像數值-后一個像數值+一個恒定的常量

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#灰度圖的轉換 dst = np.zeros((height,width,1),np.uint8) for i in range(0,height):for j in range(0,width-1):grayP0 = int(gray[i,j])#獲取當前的灰度值grayP1 = int(gray[i,j+1])#因為寬度+1了,所以j需要減一,否則會造成數組越界newP = grayP0-grayP1+150if newP>255:newP=255if newP<0:newP=0dst[i,j] = newP cv2.imshow('dst',dst) cv2.waitKey(0)

九、顏色的映射變化改變圖片的顏色風格

偏藍風格:b1.5+g1.3

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) cv2.imshow('img',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1]dst = np.zeros((height,width,3),np.uint8) for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]b = b*1.5g = g*1.3if b>255:b=255if g>255:g=255dst[i,j] = (b,g,r) cv2.imshow('dst',dst) cv2.waitKey(0)

效果圖如下:

十、圖片的油畫效果

實現步驟:
1、實現彩色到灰色照片的轉換
2、將圖片分割為若干個小方塊,統計這些小方塊中的每個像素值
3、將0-255的灰度值劃分為若干個等級,再把每個像素值映射到這些等級中
4、找到每個等級中含有像素最多的等級,并且求取這些像素的均值;從而實現每個小方塊中像素個數的統計
5、用統計出來的平均值來替代原來的像素值,最終實現油畫效果

import cv2 import numpy as np img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1) cv2.imshow('img',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#完成灰度圖像的轉換 dst = np.zeros((height,width,3),np.uint8)#定義目標圖片 for i in range(4,height-4):#因為下面的循環是定義的小方塊大小為8*8for j in range(4,width-4):array1 = np.zeros(8,np.uint8)#定義的灰度等級為8個,這里定義一個數組裝載這8個等級for m in range(-4,4):for n in range(-4,4): p1 = int(gray[i+m,j+n]/32)array1[p1] = array1[p1]+1currentMax = array1[0]l = 0for k in range(0,8):if currentMax<array1[k]:currentMax = array1[k]l = k# 簡化 均值for m in range(-4,4):for n in range(-4,4):if gray[i+m,j+n]>=(l*32) and gray[i+m,j+n]<=((l+1)*32):(b,g,r) = img[i+m,j+n]dst[i,j] = (b,g,r) cv2.imshow('dst',dst) cv2.waitKey(0)

效果圖如下:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的03-图像特效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。