這篇文章將為大家詳細(xì)講解有關(guān)OpenCV怎么實(shí)現(xiàn)圖像縮放,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶(hù)提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、域名與空間、虛擬主機(jī)、網(wǎng)絡(luò)營(yíng)銷(xiāo)、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶(hù)提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶(hù)的口碑塑造優(yōu)易品牌,攜手廣大客戶(hù),共同發(fā)展進(jìn)步。
在實(shí)際應(yīng)用中,我們經(jīng)常需要將某種尺寸的圖像轉(zhuǎn)換為其他尺寸的圖像,比如放大或縮小圖像。實(shí)現(xiàn)圖像縮放的功能主要涉及到兩個(gè)關(guān)鍵的函數(shù):cvResize和cvCreateImage。
關(guān)鍵函數(shù)介紹:
1.cvResize
void cvResize(
const CvArr* src,
CvArr* dst,
Int interpolation = CV_INTER_LINEAR
);
函數(shù)說(shuō)明:
第一個(gè)參數(shù)表示輸入的圖像。
第二個(gè)參數(shù)表示輸出的圖像。
第三個(gè)參數(shù)指定插值方法,默認(rèn)為線(xiàn)性插值法,可用的插值方法如下:
CV_INTER_NN 含義:最近鄰插值
CV_INTER_LINER 含義:線(xiàn)性插值
CV_INTER_AREA 含義:區(qū)域插值
CV_INTER_CUBIC 含義:三次樣條插值
一般情況下,我們期望源圖像和重采樣后的目標(biāo)圖像之間的映射盡可能地平滑。參數(shù)interpolation就是控制如何進(jìn)行映射。當(dāng)縮小圖像時(shí),目標(biāo)圖像的像素會(huì)映射為源圖像中的多個(gè)參數(shù),這時(shí)需要進(jìn)行插值。當(dāng)放大圖像時(shí),目標(biāo)圖像上的像素可能無(wú)法在源圖像中找到精確對(duì)應(yīng)的像素,也需要進(jìn)行插值。最簡(jiǎn)單的方法試將目標(biāo)圖像各點(diǎn)的像素值設(shè)為源圖像中與其距離最近的像素值,這就是當(dāng)interpolation設(shè)為CV_INTER_NN時(shí)用的算法。
采用線(xiàn)性插值算法(CV_INTER_LINER),將根據(jù)源圖像附件的4個(gè)鄰近像素的線(xiàn)性加權(quán)計(jì)算得出,權(quán)重由這4個(gè)像素到精確目標(biāo)點(diǎn)的距離決定。
采用區(qū)域插值(CV_INTER_AREA)是用新的像素點(diǎn)覆蓋原來(lái)的像素點(diǎn),然后求取覆蓋區(qū)域的平均值。
采用三次樣條插值(CV_INTER_CUBIC)是對(duì)源圖像附件的4X4個(gè)鄰近像素進(jìn)行三次樣條擬合,然后將目標(biāo)像素對(duì)應(yīng)的三次樣條值作為目標(biāo)圖像對(duì)應(yīng)像素點(diǎn)的值。
2. cvCreateImage
函數(shù)原型:
IplImage* cvCreateImage(CvSize size, intdepth, intchannels);
函數(shù)說(shuō)明:
第一個(gè)參數(shù)表示圖像的大小;
第二個(gè)參數(shù)表示圖像的深度;
第三個(gè)參數(shù)表示圖像的通道數(shù)。
以下是使用OpenCV進(jìn)行圖像縮放的程序。
image_resizing.cpp
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace std;
int main(int argc,char **argv)
{
const char *pstrImageName = "Rayeager_PX2.jpg";
const char *pstrSaveImageName = "Rayeager_PX2_Resizing.jpg";
const char *pstrWindowsSrcTitle = "initial";
const char *pstrWindowsDstTitle = "resizing";
double fScale = 0.314;//縮放倍數(shù)
CvSize czSize;//目標(biāo)圖像尺寸
//從文件中讀取圖像
IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);
IplImage *pDstImage = NULL;
//計(jì)算目標(biāo)圖像大小
czSize.width = pSrcImage->width * fScale;
czSize.height = pSrcImage->height * fScale;
//創(chuàng)建圖像并縮放
pDstImage = cvCreateImage(czSize, pSrcImage->depth, pSrcImage->nChannels);
cvResize(pSrcImage, pDstImage, CV_INTER_AREA);
//創(chuàng)建窗口
cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE);
cvNamedWindow(pstrWindowsDstTitle, CV_WINDOW_AUTOSIZE);
//在指定窗口中顯示圖像
cvShowImage(pstrWindowsSrcTitle, pSrcImage);
cvShowImage(pstrWindowsDstTitle, pDstImage);
//等待按鍵事件
cvWaitKey();
//保存圖片
cvSaveImage(pstrSaveImageName, pDstImage);
//銷(xiāo)毀顯示圖像文件的窗口
cvDestroyWindow(pstrWindowsSrcTitle);
cvDestroyWindow(pstrWindowsDstTitle);
//釋放為圖像分配的內(nèi)存
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pDstImage);
return 0;
}
makefile:
INCLUDE = $(shell pkg-config --cflags opencv)
LIBS = $(shell pkg-config --libs opencv)
SOURCES = image_resizing.cpp
# 目標(biāo)文件
OBJECTS = $(SOURCES:.cpp=.o)
# 可執(zhí)行文件
TARGET = image_resizing
$(TARGET):$(OBJECTS)
g++ -o $(TARGET) $(OBJECTS) -I $(INCLUDE) $(LIBS)
$(OBJECTS):$(SOURCES)
g++ -c $(SOURCES)
clean:
rm $(OBJECTS) $(TARGET)
# 編譯規(guī)則 $@代表目標(biāo)文件 $< 代表第一個(gè)依賴(lài)文件
%.o:%.cpp
g++ -I $(INCLUDE) -o $@ -c $<
在源代碼所在的文件夾中make生成可執(zhí)行文件image_resizing,之后./image_resizing Rayeager_PX2.jpg就能實(shí)現(xiàn)圖像縮放,并且縮放的圖像保存在當(dāng)前文件夾中,文件名為Rayeager_PX2_Resizing.jpg
關(guān)于“OpenCV怎么實(shí)現(xiàn)圖像縮放”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
網(wǎng)頁(yè)名稱(chēng):OpenCV怎么實(shí)現(xiàn)圖像縮放
網(wǎng)頁(yè)地址:http://chinadenli.net/article16/iejogg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站設(shè)計(jì)公司、App設(shè)計(jì)、搜索引擎優(yōu)化、定制網(wǎng)站、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)