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 ...
随机推荐
- 三分钟明白 Activiti工作流 -- java运用_转载
一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑 采用工作 ...
- T-SQL函数类型——系统函数
1 ??? 为什么 123 和'123'的ISNUMERIC()返回结果相同. SELECT ISNUMERIC(123) --结果为1SELECT ISNUMERIC('123') --结果为1S ...
- 排序算法(Apex 语言)
/* Code function : 冒泡排序算法 冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值 时间复杂度:O(n*n) 空间复杂度:1 */ List< ...
- Linux-TCP/IP, IPv4地址类别摘要
TCP/IP分层: application layer transport layer internet ...
- java反射与多态(父类调用子类)的代码演示
package Test0817; import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method ...
- php八大设计模式之装饰器模式
我们都知道,得到一匹布需要大概这么几步: 1.染色 2.印花 3.裁剪 这种形式在面向对象中怎么实现呢? 面向过程[继承模式]实现: 继承模式得到需要的布料,一步一步的加工. 继承的层次越来越深,扩展 ...
- Android编译环境配置
Android编译环境配置 网上关于Android编译环境配置的整理资料有不少,经整理亲测后,希望能给需要的亲们提供帮助. 主要分为四步: 1.安装JDK(Java Standard Edition ...
- HDFS 文件系统流程图。PB级文件存储时序图。
大小文件通吃, 热点hash功能. 全局唯一KV索引. 百度网盘模式.断点续传功能.MR分析功能. 来自为知笔记(Wiz)
- OpenGL 获取当前屏幕坐标对应的三维坐标
转自原文 OpenGL 获取当前屏幕坐标对应的三维坐标,使用很简单glu库中的一个函数 #include <GL/glut.h> #include <stdlib.h> #in ...
- hdu 1575 矩阵连乘2
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...