OpenCV學習心得(6) -- 圖像的縮放

轉載請著名出處與作者

OpenCV提供了一個實現圖像縮放的函數:cv::resize

void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

dsize為縮放目的的寬度和高度信息.如果此參數為0(可以使用cv::Size()得到0 size),則根據fx和fy計算獲取.

fx與fy為寬度和高度的縮放比例.如果此參數為0則根據dsize計算獲取.

注意:resize的結果與dsize,fx,fy有關,與dst的預設值沒有關係,函數會重置dst的大小.

interpolation為縮放時填充的類型,默認情況下是雙線性填充.有下面的值可以選擇:

INTER_NEAREST 臨近元素插值法, 

INTER_LINEAR 雙線性差值法, 

INTER_CUBIC 立方差值法,

INTER_AREA 像素關係重採樣法,縮小圖像的時候此法可避免波紋出現,

INTER_LANCZOS4 lanczos4插入法


類中的函數如下:

//!伸縮圖片,ROI會被重置為整個新圖片,Resize函數針對整個圖片進行處理.
	//!rate為伸縮比率.interpolation為填充類型,可以為下面的值:
	//!INTER_NEAREST 臨近元素插值法, INTER_LINEAR 雙線性差值法, INTER_CUBIC 立方差值法,INTER_AREA 像素關係重採樣法,縮小圖像的時候此法可避免波紋出現,INTER_LANCZOS4 lanczos4插入法
	bool Resize(double rate,int interpolation);
	//!伸縮圖片,ROI會被重置為整個新圖片,s為新圖像的寬高.
	bool Resize(const cv::Size &s,int interpolation);
	//!伸縮圖片,ROI會被重置為整個新圖片,width為新圖像的寬,height為新圖像的高.
	bool Resize(int width,int height ,int interpolation);
	//!伸縮圖片,ROI會被重置為整個新圖片,width為新圖像的寬.此函數會鎖定長寬比,按比例根據寬度值縮放圖片.
	bool Resize(int width,int interpolation);
bool COpenCVImage::Resize(double rate,int interpolation)
{
	cv::resize(m_src,m_src,cv::Size(),rate,rate,interpolation);
	SetWholeAsROI();
	m_modifyed_for_draw=true;
	return true;
}
bool COpenCVImage::Resize(const cv::Size &s,int interpolation)
{
	cv::resize(m_src,m_src,cv::Size(s),0,0,interpolation);
	SetWholeAsROI();
	m_modifyed_for_draw=true;
	return true;
}
bool COpenCVImage::Resize(int width,int height ,int interpolation)
{
	return Resize(cv::Size(width,height),interpolation);
}
bool COpenCVImage::Resize(int width,int interpolation)
{
	return Resize(width,(int)(((double)m_src.rows)*((double)width/(double)m_src.cols)+0.5), interpolation);
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值