目标:

想要A,B两个窗口,A窗口实时显示相机的画面,当我按下照相按钮的时候,B窗口显示我捕获到的图片。

遇到的问题:

在A窗口 实时显示的时候 用到了while (true){ //视频显示}

因为要一直在A窗口显示画面,所以这个视频显示的循环永远跳不出去,此时我的 “获取图片”这个按钮是按不了的(此时程序一直都在执行while循环)

解决方法:

用多线程来解决。(在下还是个新手,是一边百度一遍自学,难免会有问题,请多包含,有问题欢迎提出批评)

我设置了一个"标志位" grabImg,当 grabImg为ture时,窗口B显示那一瞬间的图像,其余的时候都在窗口A显示图像。

这样就可以实现我的目标要求。

代码:

public partial class Form1 : Form
{
public delegate void FlushClient(); //创建一个委托线程
FlushClient fc;
public bool grabImg = false;
public int flag=0;

//halcon变量
public HTuple hv_ExpDefaultWinHandle1;
public HTuple hv_ExpDefaultWinHandle2;
public HObject ho_Image = null;
public HTuple hv_AcqHandle = null;
public HTuple hv_Width = new HTuple();
public HTuple hv_Height = new HTuple();

public Form1()
{
InitializeComponent();
}

//初始化相机
public void InitCamera()
{
hv_ExpDefaultWinHandle1 = hWindowControl1.HalconWindow; //显示窗口一
hv_ExpDefaultWinHandle2 = hWindowControl2.HalconWindow; //显示抓拍的窗口
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.CloseAllFramegrabbers();  //在打开相机前最好先关闭所有相机,保证相机处于闲置状态。
HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb",
-1, "false", "default", "[1] USB Camera", 0, -1, out hv_AcqHandle);
hv_Height =480; //相机参数(我的USB相机是640X480的分辨率)
hv_Width =640 ;
HOperatorSet.SetPart(hv_ExpDefaultWinHandle1, 0, 0, hv_Height, hv_Width); //让图片完全占满控件的窗口 
HOperatorSet.SetPart(hv_ExpDefaultWinHandle2, 0, 0, hv_Height, hv_Width);

}

//实时检测
public void ThreadFuntion()
{
HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
while (flag==0)
{
try
{
ho_Image.Dispose();
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);

HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle1); //视频显示
if (grabImg == true)
{
grabImg = false;
HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle2); //抓拍图显示
}
}
catch
{
continue;
}
}
}

private void button1_Click_1(object sender, EventArgs e)
{
fc = new FlushClient(ThreadFuntion);
try
{
InitCamera(); //初始化相机
}
catch
{
MessageBox.Show("打开相机失败", "请重试");
}

//开始委托的线程
fc.BeginInvoke(null, null);
}

private void button2_Click_1(object sender, EventArgs e)
{
grabImg = true;
}
}

控件截图:

我的疑问:

接下来要做的就是把获取到的图片储存起来。

转载于:https://www.cnblogs.com/rockstarmaday/p/6673247.html

初学视觉学习笔记----用摄像头获取图片相关推荐

  1. 视觉学习笔记6——YOLOv5(v6.2)部署与代码理解

    文章目录 前言 一.YOLOv5是什么? 二.环境搭建 1.基本环境 2.特殊环境 三.自定义训练 模型训练 模型测试 四.源码个人理解 1.detect.py文件 2.yolo.py文件 3. tr ...

  2. Kinect+OpenNI学习笔记之6(获取人体骨架并在Qt中显示)

    前言 MS的kinec SDK和OpenNI都提供了人体骨骼跟踪的算法,人体骨骼跟踪算法在kinect人体行为识别中非常重要,该识别过程通常被用来作为行为识别的第一步, 比如说,通过定位人体中的骨骼支 ...

  3. 初学深度学习笔记(一)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 新手初学深度学习笔记(一) 前言 前言 跨专业初学者,整理一些自己所学到的知识,有问题请各位大佬指出

  4. h5调用手机摄像头获取图片用于人脸识别

    h5调用手机摄像头获取图片用于人脸识别 1.安卓手机获取前置摄像头,并在video标签显示 注:navigator.mediaDevices.getUserMedia文档说明兼容Safari11,实测 ...

  5. opencv设置摄像头获取图片大小

    opencv设置摄像头获取图片大小方法如下: cap = cv2.VideoCapture(0) #打开默认摄像头采集图像width = 640 #定义摄像头获取图像宽度 height = 480 # ...

  6. 【新手入门】树莓派Raspberry学习笔记4 摄像头安装+配置+简单使用

    树莓派Raspberry Pi3B+学习笔记4 今日达成: ①摄像头安装+配置+简单使用 ②树莓派上python编程初尝试 这份笔记里主要讲的是摄像头的安装+配置+简单使用. 一.摄像头和树莓派连接+ ...

  7. csi python 摄像头 树莓派_【新手入门】树莓派Raspberry学习笔记4 摄像头安装+配置+简单使用...

    树莓派Raspberry Pi3B+学习笔记4 今日达成: ①摄像头安装+配置+简单使用 ②树莓派上python编程初尝试 这份笔记里主要讲的是摄像头的安装+配置+简单使用. 一.摄像头和树莓派连接+ ...

  8. python打开摄像头获取图片_Python基于opencv调用摄像头获取个人图片的实现方法

    接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在 ...

  9. 2017-2-15从0开始前端学习笔记(HTML)-图片-表格-表单

    2017-2-15从0开始前端学习笔记-图片-表格-表单 标签 图片 图片<img src="#" alt="文本说明 不能加载图片时显示" title= ...

最新文章

  1. CodeForces 362B Petya and Staircases
  2. VS2010应用程序工程中文件的组成结构
  3. 501.二叉搜索树中的众数
  4. python3.6.5安装pip_无法在Python3.6中pip安装pickle
  5. 大话西游之Office应用实例系列! 19
  6. 在.NET 3.5中使用Parallel.For()(转帖)
  7. 【IoT】 产品设计与工艺:塑料表面处理工艺
  8. linux系统版本下载
  9. html实现百度换肤,百度换肤
  10. 聚类-KMeans算法(图解算法原理)
  11. Spring Boot系列——日志配置
  12. 怎样使用word的朗读文本功能
  13. fatal: Needed a single revision, invalid upstream “xxxx“ 问题解决
  14. 一篇博客解决网线挑选问题
  15. 干货| 生鲜电商的冷库内部该怎么设计(含案例)
  16. 痛彻心扉:学了半年 Python,还是找不到工作!
  17. 直播软件源码如何在Android端实现多人视频通话
  18. Google PR值原理和详细解说
  19. 国内十款手机ROOT软件运用评测
  20. 逆天了!程序员独自开发了一款 PS 杀手,免费免安装

热门文章

  1. java(1)——用notepad++编译java(javac.exe)
  2. 使用OpenSSL进行RSA加密和解密(非对称)
  3. HTML <cite> 标签
  4. Leetcode题库 32.从上到下打印二叉树(层次遍历 C实现)
  5. linux 网络通讯 命令,Linux—网络通讯管理命令
  6. 非二进制字符串数据:CHAR,VARCHAR,TEXT
  7. 这Hadoop分布式文件系统
  8. ADO.NET DataSet 数据模型
  9. iOS中UITextField的字数限制
  10. Web公路,新手上路!NO.2 [ 基础标签(一)]