【OpenCV学习一】体验OpenCV

<span style="font-size:18px;">#include "highgui.h"

int main(int argc,char** argv)
{
     IplImage* img=cvLoadImage(argv[1]);
     cvNamedWindow("Test1",CV_WINDOW_AUTOSIZE);
     cvShowImage("Test1",img);
     cvWaitKey(0);
     cvReleaseImage(&img);
     cvDestoryWindow("Test1");
}</span>

如果是完完全全的OpenCV初学者的话也许argv[1]会让人感到困惑,其实这里也可以用Linux地址来代替的,记得多用一个"\",因为需要转义。cvLoadImage()函数是一个高层调用接口,它通过文件名来确定加载文件的格式,并且该函数将自动分配图像数据结构所需的内存。

#include<cv.h>
#include<highgui.h>

void my_mouse_callback(int event, int x, int y, int flags, void* param);

CvRect box;
bool drawing_box = false;

void draw_box(IplImage* img, CvRect rect)
{
	cvRectangle(img,
		cvPoint(box.x, box.y),
		cvPoint(box.x + box.width, box.y + box.height),
		cvScalar(0xff, 0x00, 0x00));
}

int main(int argc, char* argv[])
{
	box = cvRect(-1, -1, 0, 0);
	IplImage* image = cvCreateImage(
		cvSize(200, 200),
		IPL_DEPTH_8U,
		3);
	cvZero(image);
	IplImage* temp = cvCloneImage(image);
	cvNamedWindow("Box Example");

	cvSetMouseCallback("Box Example",
		my_mouse_callback,
		(void*)image);

	while (1)
	{
		cvCopyImage(image, temp);
		if (drawing_box)
			draw_box(temp, box);
		cvShowImage("Box Example", temp);

		if (cvWaitKey(15) == 27)
			break;
	}

	cvReleaseImage(&image);
	cvReleaseImage(&temp);
	cvDestroyWindow("Box Example");
}

void my_mouse_callback(int event, int x, int y, int flags, void* param)
{
	IplImage* image = (IplImage*)param;

	switch (event)
	{
	case CV_EVENT_MOUSEMOVE:
	{
		if (drawing_box)
		{
			box.width = x - box.x;
			box.height = y - box.y;
		}
	}
		break;
	case CV_EVENT_LBUTTONDOWN:
	{
		drawing_box = true;
		box = cvRect(x, y, 0, 0);
	}
		break;
	case CV_EVENT_LBUTTONUP:
	{
		drawing_box = false;
		if (box.width < 0)
		{
			box.x += box.width;
			box.width *= -1;
		}
		if (box.height<0)
		{
			box.y += box.height;
			box.height *= -1;
		}
		draw_box(image, box);
	}
		break;
	}
}

HighGUI中创建滑动条的函数如下,前2个参数分别指定了滑动条的名字以及滑动条附属窗口的名字。随后的两个参数之一为value,它是一个整形指针,当滑动条被拖动时,OpenCV会自动将当前位置所代表的值传给指针指向的整数,另外一个参数count是一个整数值,为滑动条所能表示的最大值。最后一个参数是一个指向回掉函数的指针,当滑动条被拖动时,回掉函数会自动被调用。这跟鼠标事件的函数实现类似。回掉函数必须为CvTrackbarCallback格式。

int cvCreateTrackbar
(  const char* trackbar_name,
   const char* window_name,
   int* value,
   int   count,
   CvTrackerCallback  on_change
);
void (*callback) (int position)
int cvGetTrackbarPos
(
    const char* trackbar_name,
    const char* window_name
);

void cvSetTrackbarPos
(
    const char* trackbar_name,
    const char* window_name,
    int pos
);

这两个函数可以用在程序的任何地方来读取或设置滑动条的值。

时间: 2024-11-05 02:12:30

【OpenCV学习一】体验OpenCV的相关文章

QT+opencv学习笔记一 opencv配置及Mat浅拷贝

今天终于把Qt + opencv配置成功了,中间有一些曲折,在这里记录一下. vs2013 + opencv的方法之前记录过,但这次的不太一样,我们一开始按照这篇文章配置pro Qt5中进行OpenCV开发教程 但是,死活出不来结果,研究发现,我们用的是 mingw 不是 vs,这个方法适合vs编译器 (具体可以参考:win7下的Qt环境+OpenCV视觉库) 后来,我们找到了这篇文章 QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置 但是还是有点曲折,

OpenCV学习:体验ImageWatch

Image Watch是在VS2012及以上版本上使用的一款OpenCV插件工具,能够实时显示图像和矩阵Mat的内容,跟Matlab很像,方便程序调试,相当好用. 1)安装Visual Studio 2013 我的电脑上安装了VC++ 6.0.VS2008以及VS2010,但是Image Watch均不支持这些版本,为了能亲身OpenCV中这款插件神器,特意下载安装了VS2013,激情满满的! 2)安装ImageWatch.vsix (需要Visual Studio 2012 及以上版本)  下

Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练

在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资料都可以查到,简单来说,就是将图像分成一个cell,通过对每个cell的像素进行梯度处理,进而根据梯度方向和梯度幅度来得到cell的图像特征.随后,将每个cell的图像特征连接起来,得到一个BLock的特征,进而得到一张图片的特征.Opencv当中自带HOG算法,可以直接调用,进行图像的特征提取.但

OpenCv学习笔记(三)---OpenCv中基本数据类型--Point,Size,Rect,Scalar,Vec3b类类型的详细解释及其OpenCv中源代码的详细分析

/********************************************************************************************* 程序功能: OpenCv的基本数据结构源代码的解读,我们常用的OpenCv的基本数据结构有六种: 1--Point类 2--Size类 3--Rect类 4--Scalar类 5--Vec3b--向量模板类 6--Range类 编写环境: OpenCv2.4.8+VS2010 地点时间: 陕西师范大学 201

OpenCV学习笔记一 OpenCV 2.49 + Eclipse 配置教程

1.安装opencv库 1.1 双击opencv-2.4.9.exe,安装到指定目录. 1.2安装VC2010运行库,百度搜索VC2010运行库,下载安装即可.如果完成下面的所有配置之后运行程序时提示还缺少dll等文件,需要用360修复,进入人工服务,搜索提示缺少的dll文件,点击修复即可. 1.3将opencv\build\x86\vc11路径下的bin.lib.staticlib三个文件夹的路径添加到环境变量中. 2.配置Eclipse 2.1 新建一个工程file -> new -> c

OpenCV学习 1:OpenCV安装与第一个图像显示程序

原创作品,转载请注明出处 为了提升逼格,决定学下OpenCV,想想如果可以做人脸识别,定点降落,让飞机跟着自己飞..想想都有点小激动.这只是想的,能不能学会还不知道..哈..      1:先下载:http://sourceforge.net/projects/opencvlibrary/  可以到这里去下,我下的是2.4.10版本的,window下用的.       感觉win下面的开发环境好用,不想把时间浪费在其他事情上.就先用VS2010学着先,等学到一定程度了可以 转用eclipse,这

OPenCv学习一:opencv安装与环境配置

参考自:http://blog.csdn.net/poem_qianmo/article/details/19809337 一.            所需工具与准备工作 1.OpenCV版本:3.00 下载地址: http://www.opencv.org.cn/index.php/Download 2.编译环境:VS2010 3.安装OpenCV,本文安装路径为:D:\professional\OpenCV 二.            环境变量配置: 在开始菜单找到计算机,右键“属性”. 点

OpenCv学习笔记(一)----OpenCv中Mat类源码的详细解读(2)

(一)像素存储的方法 1--本节我们讲解如何存储像素,存储像素值,需要指定: 1--颜色空间 2--数据类型 2--其中,颜色空间是指针对一个给定的颜色,如何组合颜色以其编码. 3--最简单的颜色空间是----灰度级空间----只需要处理:黑色和白色,对它们进行组合便可以产生不同程度的灰 色(256灰度级) 4--对于彩色方式---则有更多种类的颜色空间,但不论那种方式,都是把颜色分成:三个或者四个---基元素,通过 组合基元素,就可以产生所有的颜色 1--RGB颜色空间是最常用的一种颜色空间,

OpenCv学习笔记(七)---OpenCv中的基本绘图函数,圆,椭圆,线段,矩形,多边形的绘制(1)

(一)本节教程的目的 本节你将学到: 1--如何使用Point在图像中定义2D点 2--如何以及为何使用Scalar 3--用OpenCv的函数Line绘直线 4--用OpenCvd的函数ellipse绘制椭圆 5--用OpenCv的函数rectangle绘矩形 6--用OpenCv的函数circle绘圆 7--用OpenCv的函数fillPoly绘填充多边形 (二)原理,本节我们将大量使用Point和Scalar这两个结构: **********************************

【opencv学习】使用opencv与两个摄像头实现双目标定与测距

目录 目录 说明 之前文章中的双目测距代码 效果更好的双目视觉代码 效果更好的双目视觉代码的实现 1 标定过程 2 测距过程 一些问题以及解决方法 要说的 1 说明 我之前写过一篇文章<完全基于opencv的双目景深与测距的实现>:http://blog.csdn.net/hysteric314/article/details/50456570 但是之前文章中的双目视觉代码并不完善,所以就想再找找看有没有更好的实现方法. 然后就在youtube上找到一个视频:https://www.youtu