OpenCV-Python?對(duì)圖像的基本操作代碼
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 設(shè)置兼容中文 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei']
D:\Anaconda\AZWZ\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll
warnings.warn("loaded more than 1 DLL from .libs:\n%s" %
cv.__version__
'4.5.1'
rain = cv.imread('img/rain.jpg')[:500,:500,:]
view = cv.imread('img/view.jpg')
print(rain.shape)
print(view.shape)
(500, 500, 3)
(500, 500, 3)
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title('rain.jpg')
plt.subplot(1,2,2)
m2 = plt.imshow(view[:,:,::-1])
plt.title('view.jpg')
Text(0.5, 1.0, 'view.jpg')

1.圖像的加法?
# cv加法 add_img = cv.add(rain,view) plt.imshow(add_img[:,:,::-1])
<matplotlib.image.AxesImage at 0x1fdc2fed160>

# numpy 加法 add_img2 = rain + view plt.imshow(add_img2[:,:,::-1])
<matplotlib.image.AxesImage at 0x1fdc2d4d4c0>

2.圖像的混合
# 圖像的混合(按照權(quán)重) img3 = cv.addWeighted(rain,0.2,view,0.8,0) plt.imshow(img3[:,:,::-1])
<matplotlib.image.AxesImage at 0x1fdc2f01a00>

3.圖像的縮放
# 獲取絕對(duì)尺寸 行,列
row,col = rain.shape[:2]
print("row:",row,",col:",col)
row: 500 ,col: 500
# 圖像放大
res = cv.resize(rain,(2*row,2*col))
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("放大前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("放大后")
Text(0.5, 1.0, '放大后')

# 使用相對(duì)坐標(biāo) 進(jìn)行圖像縮小
res2 = cv.resize(rain,None,fx=0.5,fy=0.5)
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("縮小前")
plt.subplot(1,2,2)
m2 = plt.imshow(res2[:,:,::-1])
plt.title("縮小后")
Text(0.5, 1.0, '縮小后')
?
4.圖像的平移
# 創(chuàng)建平移矩陣 x方向上平移100,y方向上平移50
M = np.float32([[1,0,100],[0,1,50]])
M
array([[ 1., 0., 100.],
[ 0., 1., 50.]], dtype=float32)
# cv.warpAffine(要平移的圖形,平移矩陣,背景畫布大小)
res = cv.warpAffine(rain,M,rain.shape[:2])
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("平移前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("平移后")
Text(0.5, 1.0, '平移后')

5.圖像的旋轉(zhuǎn)
row,col = rain.shape[:2]
# 生成旋轉(zhuǎn)矩陣 getRotationMatrix2D(旋轉(zhuǎn)中心坐標(biāo),旋轉(zhuǎn)角度,縮放比例)
M = cv.getRotationMatrix2D((row/2,col/2),45,1)
# cv.warpAffine(要旋轉(zhuǎn)的圖形,旋轉(zhuǎn)矩陣,背景畫布大小)
res = cv.warpAffine(rain,M,(col,row))
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("旋轉(zhuǎn)前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("旋轉(zhuǎn)后")
Text(0.5, 1.0, '旋轉(zhuǎn)后')

6.圖像的仿射變換
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[100,100],[200,50],[100,250]])
M = cv.getAffineTransform(pts1,pts2)
M
array([[ 0.66666667, 0. , 66.66666667],
[-0.33333333, 1. , 66.66666667]])
res = cv.warpAffine(rain,M,rain.shape[:2])
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("仿射變換前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("仿射變換后")
Text(0.5, 1.0, '仿射變換后')

7.圖像的透射變換
pst1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pst2 = np.float32([[100,145],[300,100],[80,290],[310,300]])
M = cv.getPerspectiveTransform(pst1,pst2)
M
array([[ 3.98327670e-01, -2.09876559e-02, 7.49460064e+01],
[-1.92233080e-01, 4.29335771e-01, 1.21896057e+02],
[-7.18774228e-04, -1.33393850e-05, 1.00000000e+00]])
res = cv.warpPerspective(rain,M,rain.shape[:2])
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("透射變換前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("透射變換后")
Text(0.5, 1.0, '透射變換后')

8.圖像金字塔
# 上采樣 img_up = cv.pyrUp(rain)
# 下采樣 img_down = cv.pyrDown(rain)
plt.figure()
plt.subplot(1,3,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("原圖")
plt.subplot(1,3,2)
m2 = plt.imshow(img_up[:,:,::-1])
plt.title("上采樣")
plt.subplot(1,3,3)
m2 = plt.imshow(img_down[:,:,::-1])
plt.title("下采樣")
Text(0.5, 1.0, '下采樣')
?
到此這篇關(guān)于OpenCV-Python 對(duì)圖像的基本操作的文章就介紹到這了,更多相關(guān)OpenCV-Python圖像操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python opencv實(shí)現(xiàn)圖像矯正功能
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)圖像矯正功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
用Python展示動(dòng)態(tài)規(guī)則法用以解決重疊子問題的示例
這篇文章主要介紹了用Python展示動(dòng)態(tài)規(guī)則法用以解決重疊子問題的一個(gè)棋盤游戲的示例,動(dòng)態(tài)規(guī)劃常常適用于有重疊子問題和最優(yōu)子結(jié)構(gòu)性質(zhì)的問題,且耗時(shí)間往往遠(yuǎn)少于樸素解法,需要的朋友可以參考下2015-04-04
基于Python實(shí)現(xiàn)DIT-FFT算法
FFT(Fast Fourier Transformation)是離散傅氏變換(DFT)的快速算法。即為快速傅氏變換。本文將用Python語言實(shí)現(xiàn)DIT-FFT算法,感興趣的可以了解一下2022-10-10
pytorch 數(shù)據(jù)處理:定義自己的數(shù)據(jù)集合實(shí)例
今天小編就為大家分享一篇pytorch 數(shù)據(jù)處理:定義自己的數(shù)據(jù)集合實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python實(shí)現(xiàn)強(qiáng)制復(fù)制粘貼的示例詳解
下個(gè)文檔還要馬內(nèi)?還好我會(huì)Python,本文就來教大家來一手如何利用Python實(shí)現(xiàn)強(qiáng)制復(fù)制粘貼。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12
利用Python實(shí)現(xiàn)讀取Word文檔里的Excel附件
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)讀取Word文檔里的Excel附件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12

