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 );