Opencv打开相机,并在上面用鼠标画框
#include <opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;-------------
#define WINDOW_NAME "【程序窗口】" //为窗口标题定义的宏 //-----------------------------------【全局变量声明部分】-----------------------------------
// 描述:全局变量的声明
//-----------------------------------------------------------------------------------------------
Rect g_rectangle;
bool g_bDrawingBox = false;//是否进行绘制
Mat g_srcImage;
Mat g_grayImage;
int g_nThresh = 80;
int g_nThresh_max = 255;//-----------------------------------------------------------------------------------------------
void DrawRectangle(cv::Mat& img, cv::Rect box)
{cv::rectangle(img, box.tl(), box.br(), cv::Scalar(0, 0, 255));//随机颜色
}//--------------------------------【on_MouseHandle( )函数】-----------------------------
// 描述:鼠标回调函数,根据不同的鼠标事件进行不同的操作
//-----------------------------------------------------------------------------------------------
void on_MouseHandle(int event, int x, int y, int flags, void* param)
{Mat& image = *(cv::Mat*) param;switch (event){//鼠标移动消息case EVENT_MOUSEMOVE:{if (g_bDrawingBox)//如果是否进行绘制的标识符为真,则记录下长和宽到RECT型变量中{g_rectangle.width = x - g_rectangle.x;g_rectangle.height = y - g_rectangle.y;}}break;//左键按下消息case EVENT_LBUTTONDOWN:{g_bDrawingBox = true;g_rectangle = Rect(x, y, 0, 0);//记录起始点}break;//左键抬起消息case EVENT_LBUTTONUP:{g_bDrawingBox = false;//置标识符为false//对宽和高小于0的处理if (g_rectangle.width < 0){g_rectangle.x += g_rectangle.width;g_rectangle.width *= -1;}if (g_rectangle.height < 0){g_rectangle.y += g_rectangle.height;g_rectangle.height *= -1;}//调用函数进行绘制DrawRectangle(image, g_rectangle);}break;}
}void main()
{VideoCapture openCamera(0);if (openCamera.isOpened()){Mat camFrame; //jjdjkfjajfjlMat drawImage; //jjdjkfjajfjlwhile (true){openCamera >> camFrame;【2】设置鼠标操作回调函数namedWindow(WINDOW_NAME);setMouseCallback(WINDOW_NAME, on_MouseHandle, (void*)&camFrame);//【3】程序主循环,当进行绘制的标识符为真时,进行绘制while (g_bDrawingBox){camFrame.copyTo(drawImage);//拷贝源图到临时变量DrawRectangle(drawImage, g_rectangle);//当进行绘制的标识符为真,则进行绘制imshow("DrawLines", drawImage);if (waitKey(10) == 27) break;//按下ESC键,程序退出}//【5】 imshow(WINDOW_NAME, camFrame);//waitKey(30);if (waitKey(10) == 27) break;//按下ESC键,程序退出}}}
Opencv打开相机,并在上面用鼠标画框相关推荐
- OpenCV打开相机,调整窗口大小位置
OpenCV打开相机,调整窗口大小位置 import cv2cap = cv2.VideoCapture(0) cv2.namedWindow('test_cam',cv2.WINDOW_NORMAL ...
- opencv打开相机实时采集与处理
下面是opencv官方文档中的一个例子, 演示了如何打开相机,获取图片,对图片进行处理 main函数也不需要输入参数,配置好环境直接就可以运行 把处理函数进行修改,就可以实现不同的功能 /* Open ...
- OpenCV打开相机
#include<opencv2/opencv.hpp> using namespace cv; int main() {//1.从摄像头读入视频VideoCapture cap(0);/ ...
- opencv打开相机获取图像并保存
#include<opencv2/opencv.hpp> #include<iostream>using namespace cv; using namespace std;M ...
- 使用opencv打开相机——python
import cv2 as cvdef video_demo():# 0是代表摄像头编号,只有一个的话默认为0capture = cv.VideoCapture(0)while (True):# 调用 ...
- opencv打开摄像头、录制视频
目录 一.参考: 1.运行代码:Opencv2.4学习::摄像头读取&&视频写入: 1.opencv读取视频,摄像头,保存视频代码 (2012-10-18 21:25:26) 1.Op ...
- OpenCV学习笔记(六)—— OpenCV for Android打开相机
在之前的篇章中,我们完成了Android平台开发环境的配置,也找到了剔除OpenCV Manager API的办法,那么接下来我们开始从零开始,完成一个个人的程序,实现功能如下: 1.识别指定的图片, ...
- c调用c++:opencv c版本打开相机方法
一.知识要点: c调用c++函数 二.背景: 以前工程使用的是c语言开发且工程比较大,而现在的工程使用的是C++编写的.前者较大,后者较小.虽然说C++能很好的兼容c语言,但是 ...
- 使用OpenCV进行相机标定
1. 使用OpenCV进行标定 相机已经有很长一段历史了.但是,伴随着20世纪后期的廉价针孔照相机的问世,它们已经变成我们日常生活的一种常见的存在.不幸的是,这种廉价是由代价的:显著的变形.幸运的是, ...
- android opencv 获取小图在大图的坐标_Android开发—基于OpenCV实现相机实时图像识别跟踪...
利用OpenCV实现实时图像识别和图像跟踪 图像识别 什么是图像识别 图像识别,是指利用计算机对图像进行处理.分析和理解,以识别各种不同模式的目标和对像的技术.根据观测到的图像,对其中的物体分辨其类别 ...
最新文章
- 洞察疫情,微软推出新冠数据分析网站COVID Insights
- java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
- java怎么拦截数据库查询结果_关于mybatis拦截器,有谁知道怎么对结果集进行拦截,将指定字段查询结果进行格式化...
- c++primer 第2章 书上例子 资料截图等
- The path C:\Oracle\Middleware\wlserver_10.3 contains the wrong version of WebLogic Server. Expect
- 机器学习tips:什么是pipeline?
- SpringMVC-day01
- HPlaserjet1020打印机无法识别
- 知识共享,让企业“活”起来
- 美团 2021 届秋季校园招聘笔试真题
- 线性回归——加州房价预测
- ai如何旋转画布_ai怎么让一个图形等比旋转
- max7456 C语言,用于MAX7456随屏显示器SPI接口的C程序
- 衡量度量过程性能的几个指标
- layui引入php项目,Layui使用入门教程
- NSMutableAttributedString
- Mob研究院 |2019互联网医疗行业洞察
- 小人快跑之WPF基础——图形与动画(二)
- 9月14日更新的sublime激活码
- 【总结】职业规划和自我总结----------包含职业要求
热门文章
- java的睡眠方式有几种_java的几种定时任务
- java canvas数组_java数组
- confly MySQL_MYSQL的操作类(已封装)
- crontab 日志_linux计划任务-单次任务(at)与循环任务(crontab)
- 变量函数命令 - Hugarian , Camel Pascal
- 使用百度统计分析你的网站访问数据
- 行内块 块级元素 行内元素
- 让UITableView数据处理更轻便
- OSChina 周二乱弹 —— 我国领先世界的IT技术
- Hibernate Criteria 条件查询