分为:硬件相关部分,文件部分以及图形用户接口部分

创建窗口 —— cvNamedWindow

若设置成 CV_WINDOW_AUTOSIZE 窗口大小会随着图像的载入而根据图像大小调整,用户没办法手动调整窗口大小

设置成 0 ,随意调整

cvDestoyWindow   cvDestroyAllWindows

cvGetWindowHandle   cvGetWindowName

cvLoadImage  读入16位的彩色图像 —— CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYDEPTH


鼠标事件相应采用回调函数的方式处理

CvMouseCallback

cvSetMouseCallback —— 注册到窗口(产生事件的窗口)

#include <cv.h>
#include <highgui.h> CvRect box;
bool drawing_box = false;
void my_mouse_callback(int event,int x,int y,int flags,void* param); 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(-,-,,); IplImage* img=cvCreateImage(cvSize(,),IPL_DEPTH_8U,);
cvZero(img);
IplImage* temp=cvCloneImage(img); cvNamedWindow("w1"); cvSetMouseCallback("w1",my_mouse_callback,(void*)img); while()
{
cvCopyImage(img,temp);
if(!drawing_box)
draw_box(temp,box);
cvShowImage("w1",temp); if(cvWaitKey()==)
break;
} cvReleaseImage(&img);
cvReleaseImage(&temp);
cvDestroyWindow("w1"); return ;
} void my_mouse_callback(int event,int x,int y,int flags,void* param)
{
IplImage* img=(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,,);
}
break;
case CV_EVENT_LBUTTONUP:
{
drawing_box=false;
if(box.width<)
{
box.x+=box.width;
box.width*=-;
}
if (box.height<)
{
box.y+=box.height;
box.height*=-;
}
draw_box(img,box);
}
break; }
}

sliders —— trackbar 滑动条   cvCreateTrackbar  回调函数

cvGetTrackbarPos   cvSetTrackbarPos  —— 读取设置滑动条的取值

OpenCV 不提供任何形式的按钮,用只有两个状态的滑动条来代替

#include <cv.h>
#include <highgui.h> int g_switch_value =;
IplImage* img;
IplImage* temp; void Switch_callback(int position)
{
if(position==)
{
cvShowImage("w1",img);
}else
{
cvShowImage("w1",temp);
}
} int main(int argc,char** argv)
{
cvNamedWindow("w1",CV_WINDOW_AUTOSIZE);
cvCreateTrackbar("Switch","w1",&g_switch_value,,Switch_callback);
img=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_UNCHANGED);
temp=cvLoadImage("test.jpg",CV_LOAD_IMAGE_UNCHANGED); while()
{
if (cvWaitKey()==)
break;
} cvDestroyWindow("w1");
return ;
}

视频处理

CvCapture —— 从摄像机或视频文件中读取帧所需要的信息

cvCreateFileCapture    cvCreateCameraCapture —— 为了使视频可以被成功读入,必须确保这种视频解码库已经安装在系统中

cvCreateCameraCapture  -1 时,Opencv会打开一个窗口让用户选择

读视频

cvGrabFrame(快速将视频帧读入内存,下一次调用时,指针所指向的空间会被新的图像覆盖,如果想做特殊处理需要先复制到其他地方。此内存空间由Opencv管理,不要去释放)   cvRetrieveFrame   cvQueryFrame(是cvGrabFrame 与 cvRetrieveFrame 的组合)

对一个视频文件,当调用 cvGrabFrame ,视频帧会自动前进一步,下一次调用会自动读入下一帧视频

cvReleaseCapture

cvGetCaptureProperty

cvVideoWriter 写视频 —— 不显式地释放写入结构,视频文件可能会被损坏 —— cvReleaseVideoWriter

HighGUI 中茕茕孑立的一个函数 —— ConvertImage (用于在不同图像格式之间转换 , 可以垂直旋转图像 —— 有时候摄像机图像格式与图像显示格式会反转)

OpenCV —— HighGUI的更多相关文章

  1. opencv_java import org.opencv.highgui.Highgui,类中无imread方法

    opencv_java import org.opencv.highgui.Highgui,提示错误 2018年01月19日 14:50:25 小码农的路程 阅读数:358   原因:1.OpenCV ...

  2. [OpenCV] HighGUI

    From: http://www.cnblogs.com/xylc/p/3406026.html 本模块为跨平台的gui/IO组件,支持平台包括windows,linux,mac,IOS,androi ...

  3. 树莓派上Opencv highgui的问题

    错误描述:https://bbs.csdn.net/topics/394616975?page=1#post-409508178 解决方案:直接改系统环境变量 # vim /etc/profile e ...

  4. opencv在图像显示中文

    在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...

  5. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  6. opencv 抠图联通块(c接口)

    #include "stdio.h" #include "iostream" #include "opencv/cv.h" #include ...

  7. opencv基于混合高斯模型的图像分割

    #include "stdafx.h" #include <opencv\cv.h> #include <opencv\highgui.h> #includ ...

  8. opencv统计二值图黑白像素个数

    #include "iostream" #include "queue" #include "Windows.h" #include < ...

  9. Opencv CamShift+Kalman目标跟踪

    #include "stdio.h" #include "string.h" #include "iostream" #include &q ...

随机推荐

  1. sql排名函数--四个

    1 row_number 2 rank 3 dense_rank 4 ntile 例子如下: select * into #MyTablefrom(select '语文' as 课程,70 as 成绩 ...

  2. Slimming Paint (a.k.a. Redesigning Painting and Compositing)

    Slimming Paint is a Paint team project to re-implement the Blink<->cc picture recording API to ...

  3. 洛谷 P1703 那个什么密码2

    P1703 那个什么密码2 题目背景 https://www.luogu.org/problem/show?pid=1079 题目描述 与原题一模一样.具体不同请见输入格式 输入输出格式 输入格式: ...

  4. ArcGIS api for javascript——地理处理任务-计算一个可视域

    描述 本例展示了使用一个地理处理计算一个可视域(viewshed) 单击地图上的任意点查看该点5英里内能看见的所有区域.这个模型需要几秒钟来运行并反馈结果. 可视域计算是通过ArcGIS Server ...

  5. Canvas与Paint的0基础使用

    看了非常多android自己定义方面的资料,了解了非常多原理,遇到人家自己定义的东西也可以看得懂,可是.当自己去自己定义的时候.发现脑袋一片空白,所以就先从认识Canvas和Paint開始吧! Can ...

  6. Swift:UIKit中Demo(一)

    关于Swift的基本概念及语法知识.我在前面的章节中已经介绍了非常多.这一节和下一节主要有针对性的解说Swift在实际UIKit开发中的使用场景及注意点.先来看看Demo的终于效果图. Demo分析: ...

  7. iOS开发系列之四 - UITextView 使用方法小结

    // 初始化输入框并设置位置和大小 UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 300, 1 ...

  8. beego orm commonDAL通用方法汇总

    orm 通用方法——QueryModelById 主键查询 orm 通用方法——GetOneModel 条件查询一个对象 orm 通用方法——QueryModelCount条件查询记录数 orm 通用 ...

  9. POJ 1986 裸的LCA

    思路:搞了一发链剖 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> ...

  10. ACM的算法分类 2015-04-16 14:25 22人阅读 评论(0) 收藏

    初期:  一.基本算法:        (1)枚举. (poj1753,poj2965)       (2)贪心(poj1328,poj2109,poj2586)       (3)递归和分治法.   ...