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

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



时间: 2024-09-20 00:28:14

【OpenCV归纳】1 体验OpenCV的相关文章

【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

<h1 style="margin: 0px; padding: 0px;"> <span style="font-family: "Microsoft YaHei"; font-size: 32px; color: rgb(204, 153, 51); font-weight: normal;">1.下载和安装OpenCV SDK</span> </h1> <div> <span

opencv笔记1:opencv的基本模块,以及环境搭建

opencv笔记1:opencv的基本模块,以及环境搭建 安装系统 使用fedora22-workstation-x86_64 安装opencv sudo dnf install opencv-devel 安装cmake sudo dnf install cmake 查看opencv的基本模块 cd /usr/include/opencv2/ vim opencv_modules.hpp 内容如下: #define HAVE_OPENCV_CALIB3D #define HAVE_OPENCV_

【OpenCV归纳】5 图像处理

 一.综述 本节我们将来探讨关于图像处理方面的诸多技术和应用.在学完了第一个常用的工具包之后,学习这一节将更加轻松.废话不多说,切入正题. 二.平滑处理和图像形态学 1.滤波器 "平滑处理"或者也称为"模糊处理",英文名为blurring.对于平滑处理,我们先来介绍一个重要的函数,所有的操作都由这个函数来实现. void cvSmooth {    const CvArr* src,    CvArr* dst,    intsmoothtype=CV_GAUS

【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

【OpenCV归纳】4 关于HighGUI

 通过HighGUI(high-level graphical user interface)可以实现打开窗口.显示图像.读出和写入图像文件,处理鼠标.光标.键盘事件.而HighGUI主要分成"视频输入/输出"."图像输入/输出"和"GUI工具",分别在cacap*.grfmt*和window*源文件中实现. int cvNamedWindow  ( const char* name,    int flags=CV_WINDOW_AUTOS

【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 配准-如何用opencv实现下面的配准?求哪位大神给指导。

问题描述 如何用opencv实现下面的配准?求哪位大神给指导. 解决方案 http://download.csdn.net/download/wdd3690147/3455469http://download.csdn.net/detail/ker1030/1794711 解决方案二: http://www.pudn.com/downloads595/sourcecode/graph/texture_mapping/detail2430603.html 解决方案三: 特征检测sift之后怎么处理

opencv c++-新手求教opencv实现人脸替换

问题描述 新手求教opencv实现人脸替换 刚学习Opencv看的天旋地转,现在想实现一个可以在原图的基础上在另外一张图片截取人脸然后再贴到原图的脸上.

opencv 做人脸识别 opencv 人脸匹配分析_C 语言

机器学习 机器学习的目的是把数据转换成信息. 机器学习通过从数据里提取规则或模式来把数据转成信息. 人脸识别 人脸识别通过级联分类器对特征的分级筛选来确定是否是人脸. 每个节点的正确识别率很高,但正确拒绝率很低. 任一节点判断没有人脸特征则结束运算,宣布不是人脸. 全部节点通过,则宣布是人脸. 工业上,常用人脸识别技术来识别物体. 对图片进行识别 复制代码 代码如下: #include "opencv2/core/core.hpp" #include "opencv2/obj