文档章节

【Rayeager PX2分享】OpenCV入门之图像缩放

穿
 穿prada的008
发布于 2015/05/07 14:39
字数 883
阅读 37
收藏 1

在实际应用中,我们经常需要将某种尺寸的图像转换为其他尺寸的图像,比如放大或缩小图像。实现图像缩放的功能主要涉及到两个关键的函数:cvResize和cvCreateImage。

关键函数介绍:

1.cvResize

 void cvResize(

const CvArr* src,

CvArr* dst,

Int interpolation = CV_INTER_LINEAR

);

函数说明:

第一个参数表示输入的图像。

第二个参数表示输出的图像。

第三个参数指定插值方法,默认为线性插值法,可用的插值方法如下:

CV_INTER_NN                   含义:最近邻插值

CV_INTER_LINER              含义:线性插值

CV_INTER_AREA               含义:区域插值

CV_INTER_CUBIC            含义:三次样条插值



一般情况下,我们期望源图像和重采样后的目标图像之间的映射尽可能地平滑。参数interpolation就是控制如何进行映射。当缩小图像时,目标图像的像素会映射为源图像中的多个参数,这时需要进行插值。当放大图像时,目标图像上的像素可能无法在源图像中找到精确对应的像素,也需要进行插值。最简单的方法试将目标图像各点的像素值设为源图像中与其距离最近的像素值,这就是当interpolation设为CV_INTER_NN时用的算法。

采用线性插值算法(CV_INTER_LINER),将根据源图像附件的4个邻近像素的线性加权计算得出,权重由这4个像素到精确目标点的距离决定。

采用区域插值(CV_INTER_AREA)是用新的像素点覆盖原来的像素点,然后求取覆盖区域的平均值。

采用三次样条插值(CV_INTER_CUBIC)是对源图像附件的4X4个邻近像素进行三次样条拟合,然后将目标像素对应的三次样条值作为目标图像对应像素点的值。


 

2. cvCreateImage

函数原型:

 IplImage* cvCreateImage(CvSize size, intdepth, intchannels);


函数说明:

第一个参数表示图像的大小;

第二个参数表示图像的深度;

第三个参数表示图像的通道数。

 

以下是使用OpenCV进行图像缩放的程序。


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;//缩放倍数

CvSize czSize;//目标图像尺寸

//从文件中读取图像

IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);  

IplImage *pDstImage = NULL;

//计算目标图像大小

czSize.width = pSrcImage->width * fScale;  

czSize.height = pSrcImage->height * fScale;

//创建图像并缩放

pDstImage = cvCreateImage(czSize, pSrcImage->depth, pSrcImage->nChannels);  

cvResize(pSrcImage, pDstImage, CV_INTER_AREA);

//创建窗口

cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE);  

cvNamedWindow(pstrWindowsDstTitle, CV_WINDOW_AUTOSIZE);

//在指定窗口中显示图像

cvShowImage(pstrWindowsSrcTitle, pSrcImage);  

cvShowImage(pstrWindowsDstTitle, pDstImage);

//等待按键事件

cvWaitKey();

//保存图片

cvSaveImage(pstrSaveImageName, pDstImage);

 

      //销毁显示图像文件的窗口

cvDestroyWindow(pstrWindowsSrcTitle);  

cvDestroyWindow(pstrWindowsDstTitle);

//释放为图像分配的内存  

cvReleaseImage(&pSrcImage);  

cvReleaseImage(&pDstImage);  

return 0;

}

makefile:


INCLUDE = $(shell pkg-config --cflags opencv)  

LIBS = $(shell pkg-config --libs opencv)  

SOURCES = image_resizing.cpp  

# 目标文件  

OBJECTS = $(SOURCES:.cpp=.o)  

# 可执行文件  

TARGET = image_resizing  

$(TARGET):$(OBJECTS)  

g++ -o $(TARGET) $(OBJECTS) -I $(INCLUDE) $(LIBS)  

$(OBJECTS):$(SOURCES)  

g++ -c $(SOURCES)  

clean:  

rm $(OBJECTS) $(TARGET)  

# 编译规则 $@代表目标文件 $< 代表第一个依赖文件  

%.o:%.cpp  

g++ -I $(INCLUDE) -o $@ -c $<



在源代码所在的文件夹中make生成可执行文件image_resizing,之后./image_resizing Rayeager_PX2.jpg就能实现图像缩放,并且缩放的图像保存在当前文件夹中,文件名为Rayeager_PX2_Resizing.jpg

代码:

image_resizing.rar

感谢 Ickey电子工程社区fjjjnk1234的分享


本文转载自:http://bbs.ickey.cn/group-topic-id-47342.html

穿
粉丝 0
博文 51
码字总数 24172
作品 0
福州
私信 提问
【OpenCV入门指南】第二篇 缩放图像

【OpenCV入门指南】第二篇 缩放图像 上一篇《【OpenCV入门指南】第一篇安装OpenCV》讲解了如何在VS2008下安装和配置OpenCV,本篇将介绍使用OpenCV来缩放图片。首先介绍几个关键函数——cvRes...

长平狐
2012/12/10
344
0
【OpenCV入门指南】第一篇 安装OpenCV

【OpenCV第一篇】安装OpenCV 本篇主要介绍如何下载OpenCV安装程序,如何在VS2008下安装配置OpenCV,文章最后还介绍了一个使用OpenCV的简单小例子。 《OpenCV入门指南》系列文章地址:http://...

长平狐
2012/12/10
1K
0
【Rayeager PX2分享】OpenCV入门之线段检测

线段检测主要运用Hough变换,Hough变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等...

穿prada的008
2015/05/26
873
0
1- OpenCV+TensorFlow 入门人工智能图像处理-课程介绍

人工智能最火的两个方向,自然语言处理和计算机视觉 OpenCV的图像处理 TensorFlow的使用 供需关系理论,有需求所以才有提供 招聘网站: 图像算法两万以上 都需要的技能: OpenCV TensorFlow 人...

天涯明月笙
2018/04/04
0
0
在Rayeager Px2开发板上演示opencv人脸识别demo

1、按照芯客论坛提供是方法支持 usb 摄像头 http://bbs.chipspark.com/forum.php?mod=viewthread&tid=3922 http://wiki.chipspark.com/cn/index.php/PX2%E5%BC%80%E5%8F%91%E6%9D%BFUSB%E6%9......

穿prada的008
2014/11/26
581
0

没有更多内容

加载失败,请刷新页面

加载更多

一、docker 入坑(win10和Ubuntu 安装)

前言 终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了。所以对于我们程序员而言,又...

quellanan2
14分钟前
4
0
AutoCompleteTextView

小技巧按菜单键 当菜单打开之前会调用onMenuOpened(int featereId,Menu menu),可以重写这个方法,弹出对话框或者Popmenu 再布局中添加控件AutoCompleteTextView. <AutoCompleteTextVie...

逆天游云
17分钟前
4
0
谷歌软件商店:推出5美元会员 可用数百个软件

腾讯科技讯,谷歌和苹果是全球两大智能手机操作系统的运营者,两家公司旗下分别拥有占据行业垄断地位的谷歌软件商店和苹果软件商店。据外媒最新消息,手机软件商店的商业模式正在发生一些变化...

linuxCool
39分钟前
3
0
RocketMQ 多副本前置篇:初探raft协议

Raft协议是分布式领域解决一致性的又一著名协议,主要包含Leader选举、日志复制两个部分。 温馨提示: 本文根据raft官方给出的raft动画进行学习,其动画展示地址:http://thesecretlivesofda...

中间件兴趣圈
39分钟前
3
0
elasticsearch 6.8.0 添加认证

1. 修改elasticsearch-6.8.0/config/elasticsearch.yml 最后添加一行:xpack.security.enabled: true 2. 初始化用户和密码 ./bin/elasticsearch-setup-passwords interactive 我这里初始化为......

coord
41分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部