#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打开相机,并在上面用鼠标画框相关推荐

  1. OpenCV打开相机,调整窗口大小位置

    OpenCV打开相机,调整窗口大小位置 import cv2cap = cv2.VideoCapture(0) cv2.namedWindow('test_cam',cv2.WINDOW_NORMAL ...

  2. opencv打开相机实时采集与处理

    下面是opencv官方文档中的一个例子, 演示了如何打开相机,获取图片,对图片进行处理 main函数也不需要输入参数,配置好环境直接就可以运行 把处理函数进行修改,就可以实现不同的功能 /* Open ...

  3. OpenCV打开相机

    #include<opencv2/opencv.hpp> using namespace cv; int main() {//1.从摄像头读入视频VideoCapture cap(0);/ ...

  4. opencv打开相机获取图像并保存

    #include<opencv2/opencv.hpp> #include<iostream>using namespace cv; using namespace std;M ...

  5. 使用opencv打开相机——python

    import cv2 as cvdef video_demo():# 0是代表摄像头编号,只有一个的话默认为0capture = cv.VideoCapture(0)while (True):# 调用 ...

  6. opencv打开摄像头、录制视频

    目录 一.参考: 1.运行代码:Opencv2.4学习::摄像头读取&&视频写入: 1.opencv读取视频,摄像头,保存视频代码 (2012-10-18 21:25:26) 1.Op ...

  7. OpenCV学习笔记(六)—— OpenCV for Android打开相机

    在之前的篇章中,我们完成了Android平台开发环境的配置,也找到了剔除OpenCV Manager API的办法,那么接下来我们开始从零开始,完成一个个人的程序,实现功能如下: 1.识别指定的图片, ...

  8. c调用c++:opencv c版本打开相机方法

    一.知识要点:         c调用c++函数 二.背景:     以前工程使用的是c语言开发且工程比较大,而现在的工程使用的是C++编写的.前者较大,后者较小.虽然说C++能很好的兼容c语言,但是 ...

  9. 使用OpenCV进行相机标定

    1. 使用OpenCV进行标定 相机已经有很长一段历史了.但是,伴随着20世纪后期的廉价针孔照相机的问世,它们已经变成我们日常生活的一种常见的存在.不幸的是,这种廉价是由代价的:显著的变形.幸运的是, ...

  10. android opencv 获取小图在大图的坐标_Android开发—基于OpenCV实现相机实时图像识别跟踪...

    利用OpenCV实现实时图像识别和图像跟踪 图像识别 什么是图像识别 图像识别,是指利用计算机对图像进行处理.分析和理解,以识别各种不同模式的目标和对像的技术.根据观测到的图像,对其中的物体分辨其类别 ...

最新文章

  1. 洞察疫情,微软推出新冠数据分析网站COVID Insights
  2. java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
  3. java怎么拦截数据库查询结果_关于mybatis拦截器,有谁知道怎么对结果集进行拦截,将指定字段查询结果进行格式化...
  4. c++primer 第2章 书上例子 资料截图等
  5. The path C:\Oracle\Middleware\wlserver_10.3 contains the wrong version of WebLogic Server. Expect
  6. 机器学习tips:什么是pipeline?
  7. SpringMVC-day01
  8. HPlaserjet1020打印机无法识别
  9. 知识共享,让企业“活”起来
  10. 美团 2021 届秋季校园招聘笔试真题
  11. 线性回归——加州房价预测
  12. ai如何旋转画布_ai怎么让一个图形等比旋转
  13. max7456 C语言,用于MAX7456随屏显示器SPI接口的C程序
  14. 衡量度量过程性能的几个指标
  15. layui引入php项目,Layui使用入门教程
  16. NSMutableAttributedString
  17. Mob研究院 |2019互联网医疗行业洞察
  18. 小人快跑之WPF基础——图形与动画(二)
  19. 9月14日更新的sublime激活码
  20. 【总结】职业规划和自我总结----------包含职业要求

热门文章

  1. java的睡眠方式有几种_java的几种定时任务
  2. java canvas数组_java数组
  3. confly MySQL_MYSQL的操作类(已封装)
  4. crontab 日志_linux计划任务-单次任务(at)与循环任务(crontab)
  5. 变量函数命令 - Hugarian , Camel Pascal
  6. 使用百度统计分析你的网站访问数据
  7. 行内块 块级元素 行内元素
  8. 让UITableView数据处理更轻便
  9. OSChina 周二乱弹 —— 我国领先世界的IT技术
  10. Hibernate Criteria 条件查询