【OpenCV归纳】1 体验OpenCV

#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");
}

如果是完完全全的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
);

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



时间: 2025-01-04 08:17:24

【OpenCV归纳】1 体验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入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

本系列文章由@浅墨_毛星云 出品.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/19809337 1.下载和安装OpenCV SDK VS2010不用说,肯定都安装了吧.来说说当前最新的OpenCV版本2.4.8(2014年2月24日),2.4.9 (2014年4月)的下载和安装.与其说是安装,不如叫解压更加合适,因为我们下载的exe安装文件就是一个自解压程序而已. 在官网:http://opencv.org/上找到OpenCV

Learning OpenCV Lecture 1 (Using OpenCV in VS2010)

1.Create a new Win32 Console Application 2.Open the Property Manager by View->Property Manage r In Visual C++ 2010, a property sheet is an XML file that describes your project settings. We will now create a new one by right-clicking on the Debug | Wi

安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 知乎:http://www.zhihu.com/people/mao-xing-yun 写作当前博文时配套使用的OpenCV版本: 2.4.8.2.4.9.3.0   ( 2014

[OpenCV][ARM9下移植OpenCV]

安装环境 宿主机: Red Hat Enterprise Linux Server 6.3 开发板: mini2440 相关软件: cmake-3.5.1.tar.gz.OpenCV-2.3.1a.tar.bz2 下载地址: CMake: https://cmake.org/files/v3.5/cmake-3.5.1.tar.gz OpenCV: http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.3.1/O

[OpenCV]1 体验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); cvRele

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归纳】2 读写视频

 除了读入图片之外,读写视频也足够简单易学,下面来看看如何读写视频吧. 播放硬盘中的视频: #include "highgui.h" int main(int argc,char** argv) { cvNamedWindow("Test2",CV_WINDOW_AUTOSIZE); CvCapture* capture=cvCreateFileCapture(argv[1]); IplImage* frame; while(1) { frame=cvQuery

【OpenCV归纳】3 在实例中学习简单函数以及数据读写

 实例一 int main() { IplImage*  img = cvLoadImage("6085.jpg", 1); IplImage* red = cvCreateImage(cvGetSize(img), img->depth, 1); IplImage* green = cvCreateImage(cvGetSize(img), img->depth, 1); IplImage* blue = cvCreateImage(cvGetSize(img), i