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

创建窗口 —— 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. shell call python

    python -c "import os; p=os.getcwd(); print(p);print(p);print(p);print('test over')"

  2. vue2.0 兄弟组件数据传递方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. js确认框confirm()用法实例详解

    先为大家介绍javascript确认框的三种使用方法,具体内容如下 第一种方法:挺好用的,确认以后才能打开下载地址页面.原理也比较清晰.主要用于删除单条信息确认. ? 1 2 3 4 5 6 7 8 ...

  4. Out-of-Process iframes (OOPIFs)

    For Developers‎ > ‎Design Documents‎ > ‎ Out-of-Process iframes (OOPIFs) This page provides an ...

  5. CentOS7-1810 系统Samba配置说明

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件.SMB(Server Messages Block,信息服务块)通信协议是微软(Microsoft)和英特尔(Intel)在198 ...

  6. MongoDB 的replicattion 复制集练习

              replicattion 相当于 mysql 的主从复制的读写分离,共同维护相同的数据,提高服务器的可用性[假如主(PRIMARY)不能用时,mongo会迅速自动切到从(SECON ...

  7. 最简单的HTML5游戏——贪吃蛇

    <html> <head> <meta charset="UTF-8"/> <title>贪吃蛇</title> < ...

  8. iOS 7 UI 过渡指南 - 支持续 iOS 6(iOS 7 UI Transition Guide - Supporting iOS 6)

    iOS 7 UI Transition Guide Preparing for Transition Before You Start Scoping the Project Supporting i ...

  9. Magento--修改已存在的订单的运费

    遇到一种情况,需要在下单后再由管理员添加订单运费,然后顾客再付款.那么问题来了,如何给订单添加运费呢?下面是一段代码,可以实现该功能: $orderId = 'your order id';$orde ...

  10. netflix zuul 1.x与zuul2.x之比较

    1.zuul 1.x的架构如下所示: 线程模型: 其web应用的web.xml <?xml version="1.0" encoding="UTF-8"? ...