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 ...
随机推荐
- go语言中在变量后加上接口是什么意思?
如题刚刚开始学习go 语言有些不懂: a.Data = make(map[string]interface{}) 我认为它是在申请a.Data map为字符串类型的空间,那么它后面接一个空的inter ...
- codeforces 544 D Destroying Roads 【最短路】
题意:给出n个点,m条边权为1的无向边,破坏最多的道路,使得从s1到t1,s2到t2的距离不超过d1,d2 因为最后s1,t1是连通的,且要破坏掉最多的道路,那么就是求s1到t1之间的最短路 用bfs ...
- 四 numpy操作数组输出图片
一.读取一张图片,修改颜色通道后输出 # -*- coding=GBK -*- import cv2 as cv import numpy as np #numpy数组操作 def access_pi ...
- SweetAlert的入门
在做后台管理系统,在用户交互这块(弹窗.提示相关),用了一款还不错的插件SweetAlert(一款原生js提示框,允许自定义,支持设置提示框标题.提示类型.确认取消按钮文本.点击后回调函数等等), 效 ...
- 一次Linux LVM VG丢失完整找回过程记录
某客户的一台PC服务器连接了一台HP EVA 的FC SAN存储,划了一个6T的LUN分作一个单独的VG使用,在某一次异常掉电之后,发现该VG完全丢失,使用vgs/pvs/lvs命令均无法找到此VG及 ...
- HYSBZ1061题解
- 【Henu ACM Round#19 D】 Points on Line
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑l..r这个区间. 且r是满足a[r]-a[l]<=d的最大的r 如果是第一个找到的区间,则直接累加C(r-l+1,3); ...
- [Recompose] Make Reusable React Props Streams with Lenses
If you hard-code a stream of props to target a specific prop, it becomes impossible to reuse that st ...
- CodeForces B. The least round way(dp)
题目链接:http://codeforces.com/problemset/problem/2/B B. The least round way time limit per test 5 secon ...
- Codeforces Educational Codeforces Round 8 A. Tennis Tournament
大致题意: 网球比赛,n个參赛者,每场比赛每位选手b瓶水+裁判1瓶水,所有比赛每一个參赛者p条毛巾 每一轮比赛有2^k个人參加比赛(k为2^k<=n中k的最大值),下一轮晋级人数是本轮每场比赛的 ...