OpenCV —— HighGUI
分为:硬件相关部分,文件部分以及图形用户接口部分
创建窗口 —— 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的更多相关文章
- opencv_java import org.opencv.highgui.Highgui,类中无imread方法
opencv_java import org.opencv.highgui.Highgui,提示错误 2018年01月19日 14:50:25 小码农的路程 阅读数:358 原因:1.OpenCV ...
- [OpenCV] HighGUI
From: http://www.cnblogs.com/xylc/p/3406026.html 本模块为跨平台的gui/IO组件,支持平台包括windows,linux,mac,IOS,androi ...
- 树莓派上Opencv highgui的问题
错误描述:https://bbs.csdn.net/topics/394616975?page=1#post-409508178 解决方案:直接改系统环境变量 # vim /etc/profile e ...
- opencv在图像显示中文
在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...
- Atitit 图像处理 调用opencv 通过java api attilax总结
Atitit 图像处理 调用opencv 通过java api attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...
- opencv 抠图联通块(c接口)
#include "stdio.h" #include "iostream" #include "opencv/cv.h" #include ...
- opencv基于混合高斯模型的图像分割
#include "stdafx.h" #include <opencv\cv.h> #include <opencv\highgui.h> #includ ...
- opencv统计二值图黑白像素个数
#include "iostream" #include "queue" #include "Windows.h" #include < ...
- Opencv CamShift+Kalman目标跟踪
#include "stdio.h" #include "string.h" #include "iostream" #include &q ...
随机推荐
- POJ 1144 Network【割顶】
学习的这一篇:https://www.byvoid.com/blog/biconnect 割顶:对于无向图G,如果删除某个点u后,连通分量数目增加,称u为图的关节点或者割顶 u为割顶的条件: (1)u ...
- datable
$("#table_d").append("<table id='dmglTable' class='table table-striped table-hover ...
- NetBios, NetBios over TCP/IP, SMB 之间的关系
首先提到的是NetBios,NetBios是Network Basic Input/Output System的缩写,提供了一种允许局域网内不同电脑能够通信的功能.严格来说,NetBios是一套API ...
- easyui_datagrid使用
easyui的datagrid显示数据的方式(使用了jQuery) 第一步 创建显示的格式,方法有两种: 第一种:在HTML标签中创建,类似如下的形式,参数可以在标签中设置,也可以在脚本中 这种方式在 ...
- Linux Network配置
/etc/sysconfig/network [root@mytest ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=mytest /e ...
- 第四讲 Yang-Mills方程与Maxwell方程
一.变分原理 变分原理始于17世纪的速降问题,也就是连接两点的曲线在有重力的情况下,让初速度为0的一小球最快地通过? 这个问题由伯努力给出解答,他的方法非常巧妙,而最后开创了一个学科——变分学.他假设 ...
- Unity经验之谈
1.全屏与非全屏之间的切换 if (Input.GetMouseButtonDown(1)) { Screen.fullScreen = !Screen.fullScreen; } 2.Camera适 ...
- 【Codeforces Round #423 (Div. 2) B】Black Square
[Link]:http://codeforces.com/contest/828/problem/B [Description] 给你一个n*m的格子; 里面包含B和W两种颜色的格子; 让你在这个格子 ...
- 【转】CentOS下firefox安装flash说明
http://www.cnblogs.com/lamper/archive/2013/01/16/2862254.htm CentOS下自带了firefox,但没有flash插件的,按它自己的提示安装 ...
- ECharts简单入门
图1和图2是手机上显示的效果, 图3是电脑浏览器显示的效果. 如何使用ECharts? 1.下载echarts.js 2.引入echarts.js <script type="text ...