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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

opencv学习4——图像缩放

發(fā)布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv学习4——图像缩放 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、通過調用api實現(xiàn)尺寸的改變

cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None) 圖像尺寸改變

scr:原圖片;dsize:輸出圖像尺寸;fx:沿水平軸的比例因子;fy:沿垂直軸的比例因子;interpolation:插值方法,包括:

cv2. INTER_LINEAR,雙線性插值(缺省);

cv2.INTER_NEAREST,最近鄰域插值;

cv2. INTER_CUBIC,4x4像素鄰域的雙三次插值;

cv2. INTER_LANCZOS4,8x8像素鄰域的Lanczos插值;

cv2. INTER_AREA 像素關系重采樣

?

二、最近鄰域插值法

1.確定圖像縮放比例,將原圖像像素位置乘以縮放比例得到新圖像像位置,如果出現(xiàn)小數(shù),取最近鄰的像素位置(四舍五入)

2.numpy是科學計算中的常用庫,對于矩陣運算等十分方便

3.np.zeros(shape, dtype=float, order='C') 生成全零數(shù)組

Shape,數(shù)組尺寸,在此程序中設置為圖像的高、寬、通道三維數(shù)組

Dtype,數(shù)組元素類型,此代碼中這設置為無符號8位整數(shù)

Order,c代表與c語言類似,行優(yōu)先;F代表列優(yōu)先

?

三、雙線性插值法

1.給定任意一點,以及周圍已知四點(默認給定點不在已知圖像矩陣中)

2.通過兩次插值,通過周圍四點的值插值出給定點的值

3.第一次插值,確定A1、A2點的值,根據(jù)左上、左下點求出A1,根據(jù)兩點距離A1點的距離以及值進行按距離加權

P(A1) = D(A1~左上)*P(左上) + D(A1~左下)*P(左下)

同理得出A2的插值

P(A2) = D(A2~右上)*P(右上) + D(A2~右下)*P(右下)

4.第二次插值,對A1、A2進行插值得出指定點的插值

P(點) = D(A1~點)*P(A1) + D(A2~點)*P(A2)

?

四、代碼實現(xiàn)

1.api

# API 實現(xiàn)圖像尺寸改變import cv2img = cv2.imread('image01.jpg',1) imgHeight,imgWidth,imgMode = img.shape # 圖像長、寬、通道數(shù)值獲取# 壓縮比設置 coe1 = 0.5 coe2 = 2 dst1Height = int(imgHeight*coe1) dst1Width = int(imgWidth*coe1) dst2Height = int(imgHeight*coe2) dst2Width = int(imgWidth*coe2)dst1 = cv2.resize(img,(dst1Width,dst1Height)) dst2 = cv2.resize(img,(dst2Width,dst2Height)) cv2.imshow('image',dst1) cv2.imshow('image',dst2)cv2.waitKey(0) cv2.destroyAllWindows()

2.最近鄰域插值法

# 最近鄰域插值法 # 實現(xiàn)過程: # 1.獲取原圖像信息,并設置縮放比 # 2.創(chuàng)建目標圖像尺寸的數(shù)組 # 3.確定像素對應關系并賦值import cv2 import numpy as npimg = cv2.imread('image01.jpg',1) imgHeight,imgWidth,imgMode = img.shape coe = 0.5dstHeight = int(imgHeight*coe) dstWidth = int(imgWidth*coe) dstImg = np.zeros((dstHeight,dstWidth,imgMode),np.uint8)# 像素值確定,使用最近鄰域插值 for i in range(dstHeight):for j in range(dstWidth):y = int(i/coe + 0.5) #圖像改變后圖像中的位置 = 圖像改變前圖像中的位置 * 縮放比,改變前位置 = 改變后位置/縮放比以找到原像素值x = int(j/coe + 0.5) #原圖像A中的點a(x,y),對應的,改變后圖像B中的點a'(x',y')=(x*coe,y*coe)dstImg[i,j] = img[y,x] #所以,x = x'/coe,得到對應的原圖像中的位置,并將原像素中的值賦給改變后的像素cv2.imshow('image',dstImg)cv2.waitKey(0) cv2.destroyAllWindows()

3.雙向線性插值法

#雙線性插值法import cv2 import numpy as npimg = cv2.imread('image01.jpg',1) imgHeight,imgWidth,imgMode = img.shape coe = 0.5dstHeight = int(imgHeight*coe) dstWidth = int(imgWidth*coe) dstImg = np.zeros((dstHeight,dstWidth,imgMode),np.uint8)# 像素值確定,使用雙線性插值 for i in range(dstHeight):for j in range(dstWidth):y = i / coe #確定所求點位置x = j / coedy1 = y - int(y) #確定A1、A2與四點的距離dy2 = int(y + 1) - ydx1 = x - int(x)dx2 = int(x + 1) - x#確定A1、A2插值A1 = dy1 * img[int(y), int(x)] + dy2 * img[int(y), int(x + 1)]A2 = dy1 * img[int(y + 1), int(x)] + dy2 * img[int(y + 1), int(x + 1)]dstImg[i, j] = dx1 * A1 + dx2 * A2cv2.imshow('image',dstImg)cv2.waitKey(0) cv2.destroyAllWindows()

?

總結

以上是生活随笔為你收集整理的opencv学习4——图像缩放的全部內容,希望文章能夠幫你解決所遇到的問題。

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