您的位置:首页 > 运维架构

opencv暑假培训之第一次

2014-07-07 18:25 295 查看
1.显示一张图片

#include "stdafx.h"

#include "highgui.h"

int main(int argc, char* argv[])
{
    IplImage *m_img=NULL;//定义一个指针,指向空
	m_img=cvLoadImage("smile.jpg", 1);//函数cvLoadImage从指定文件读入图像,返回读入图像的指针
	cvNamedWindow("show",CV_WINDOW_AUTOSIZE);//创建一个窗口,前面的为窗口名字,cv代表是opencv的函数,特有的
	cvShowImage("show",m_img);//显示图像
	cvMoveWindow("show",300,100);//定位窗口的位置,坐标位置为x,y;
//	cvWaitKey(-1);//等待用户响应
//	cvResizeWindow("show",100,100);
	cvWaitKey();
	cvReleaseImage(&m_img);//释放图像占用的内存
	cvDestroyWindow("show");//销毁窗口
	return 0;
}


运行结果

运行结果


解释:若是将cvResizeWindow("show",100,100)的注释去掉,那么就可以改变图像的大小

cvShowImage (窗口名字,被显示的图片)

cvLoadImage(要被读入的文件的文件名,指定读入图像的颜色和深度:)//从文件中读取图像

cvNamedWindow (窗口的名字,窗口属性标志)目前唯一支持的标志是CV_WINDOW_AUTOSIZE。当这个标志被设置后,用户不能手动改变窗口大小,窗口大小会自动调整以适合被显示图像(参考cvShowImage)。

函数cvNamedWindow创建一个可以放置图像和trackbar的窗口。被创建的窗口可以通过它们的名字被引用。

cvMoveWindow (将被设置的窗口的名字,窗口左上角的x坐标,窗口左上角的y坐标) 函数cvMoveWindow改变窗口的位置。

cvWaitKey( int delay=0 );

delay 延迟的毫秒数。

函数cvWaitKey无限制的等待按键事件(delay<=0时);或者延迟"delay"毫秒。返回值为被按键的值,如果超过指定时间则返回-1。

注释:这个函数是HighGUI中唯一能够获取和操作事件的函数,所以在一般的事件处理中,它需要周期地被调用,除非HighGUI被用在某些能够处理事件的环境中。

译者注:比如在MFC环境下,这个函数不起作用。



2.在图片上画直线

#include "stdafx.h"

#include "highgui.h"
#include<stdio.h>

int main(int argc, char* argv[])
{
	CvPoint pt1;
	pt1=cvPoint(100,200);
	printf("x:%d,y:%d\n",pt1.x,pt1.y);

	CvPoint pt2;
	pt2=cvPoint(300,450);
	printf("x:%d,y:%d\n",pt2.x,pt2.y);//两个点的坐标的确定

	CvScalar color;//颜色参数类型  颜色
 	color=cvScalar(0,225,0);//(蓝,绿,红)
	printf("v1:%f,v2:%f,v3:%f\n",color.val[0],color.val[1],color.val[2]);

	IplImage *img=NULL;
	img=cvLoadImage("smile.jpg");

	cvLine(img,pt1,pt2,color,2);//画直线

	cvNamedWindow("draw");
	cvShowImage("draw",img);

	cvWaitKey();
	return 0;
}


运行结果


解释:CvScalar

可存放在1-,2-,3-,4-TUPLE类型的捆绑数据的容器

typedef struct CvScalar
 {
  double val[4]
 }
 CvScalar;

/* 构造函数:用val0初始化val[0]用val1初始化val[1], 以此类推*/
inline CvScalar cvScalar( double val0, double val1=0,
                           double val2=0, double val3=0 );


3.自己创建一个窗口,并在窗口中画一个矩形,在画矩形之前克隆一个窗口,可以进行单步调试来查看各个函数的功能

#include "stdafx.h"

#include "highgui.h"
#include<stdio.h>

int main(int argc, char* argv[])
{
	CvSize sz;
	sz=cvSize(640,480);
	printf("width:%d,height:%d\n",sz.width,sz.height);

	IplImage* img=NULL;
	img=cvCreateImage(sz,IPL_DEPTH_8U,3);
	//创建一个图像,大小:sz,深度:8,通道数:3;

	CvRect rect;//定义一个矩形
	rect=cvRect(50,30,100,150);
	CvPoint pt1=cvPoint(rect.x,rect.y);//矩形左上角的坐标赋值给pt1;
	CvPoint pt2=cvPoint(rect.x+rect.width,rect.y+rect.height);//矩形rect右下角的坐标赋值给pt2

	IplImage* img1=cvCloneImage(img);//将图像img复制给img1;
	cvRectangle(img,pt1,pt2,cvScalar(20,220,200),2);//在创建的图像上绘制一个矩形

	cvNamedWindow("create");
	cvShowImage("create",img);

	cvNamedWindow("clone");
	cvShowImage("clone",img1);
	cvWaitKey();

	cvReleaseImage(&img);
	cvReleaseImage(&img1);
	return 0;
}
运行结果


解释:CvRect

矩形框的偏移和大小

typedef struct CvRect

{

int x; /* 方形的最左角的x-坐标 */

int y; /* 方形的最上或者最下角的y-坐标 */

int width; /* 宽 */

int height; /* 高 */

}

CvRect;

/* 构造函数*/

inline CvRect cvRect( int x, int y, int width, int height );




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: