相机采集图像并显示,程序流程图,与编程实例

 

 

 

/*图像抓取线程,主动调用SDK接口函数获取图像*/
UINT CBasicDlg::GrabThread()
{
	tSdkFrameHead 	sFrameInfo;
	BYTE*			pRawBuffer;

//	CameraSetTriggerMode(m_hCamera, 2);//设置相机硬件触发模式

	while (!m_bExit)
	{
		if (CameraGetImageBuffer(m_hCamera, &sFrameInfo, &pRawBuffer, 1000) == CAMERA_STATUS_SUCCESS)
		{
			MyRawImage* pNewImage = (MyRawImage*)malloc(sizeof(MyRawImage) + sFrameInfo.uBytes);
			if (pNewImage != NULL)
			{
				pNewImage->head = sFrameInfo;
				memcpy(pNewImage->buffer, pRawBuffer, sFrameInfo.uBytes);
				pNewImage->index = mySerialPort.cRecvednum;
			}
			CameraReleaseImageBuffer(m_hCamera, pRawBuffer);

			if (pNewImage != NULL)
			{
				m_RawImageQL.Lock();
				if (m_RawImageQ.size() < RAW_BUFFER_MAX_COUNT)
					m_RawImageQ.push_back(pNewImage);
				else
					free(pNewImage);
				m_RawImageQL.Unlock();

				SetEvent(m_RawImageQE);
			}
		}
	}

	return 0;
}




UINT CBasicDlg::WorkThread()
{
	MvTimer t;
	
	
	Mat BIGframe0;
	
	//const cv::Mat ComFrame = Mat::zeros(480 * 4, 640 * 18, CV_8UC1);
	//const cv::Mat ColorComFrame = Mat::zeros(480 * 4, 640 * 18, CV_8UC3);
	//cv::Mat MainWindows = Mat::zeros(300, 1800, CV_8UC1);
	//cv::Mat ColorMainWindows = Mat::zeros(300, 1800, CV_8UC3);
	
	const cv::Mat ComFrame(480 * 4, 640 * 18, CV_8UC1);
	const cv::Mat ColorComFrame(480 * 4, 640 * 18, CV_8UC3);
	cv::Mat MainWindows(300, 1800, CV_8UC1);
	cv::Mat ColorMainWindows(300, 1800, CV_8UC3);

	cv::Mat image1, image2;
	bool start = false;

	setMouseCallback("MainWindows", on_mouse, 0);//调用回调函数 

	while (!m_bExit)
	{
		if (WaitForSingleObject(m_RawImageQE, 200) != WAIT_OBJECT_0)
			continue;

		for (;;)
		{
			std::vector<void*> RawImageQ;
			m_RawImageQL.Lock();
			RawImageQ = m_RawImageQ;
			m_RawImageQ.clear();
			m_RawImageQL.Unlock();
			if (RawImageQ.empty())
				break;
			for (size_t i = 0; i < RawImageQ.size(); ++i)
			{			
				MyRawImage* pNewImage = (MyRawImage*)RawImageQ[i];
				index = pNewImage->index;
				if (index)
				{
					if (index == 1)
					{
						start = true;
					}
					if (start)
					{						
						Mat image(pNewImage->head.iHeight, pNewImage->head.iWidth, CV_8UC1);
						Mat resImage(600, 800, CV_8UC1);				
						memcpy(image.data, pNewImage->buffer, pNewImage->head.iHeight* pNewImage->head.iWidth);											
						cv::resize(image, resImage, cv::Size(800, 600), 0, 0, INTER_NEAREST);												
						flip(resImage, resImage, -1);  //水平垂直翻转
						
						//ImageStitch(index, image1, resImage, ComFrame);
						//cv::resize(ComFrame, MainWindows, Size(1800, 300), 0, 0, INTER_NEAREST);
						//imshow("MainWindows", MainWindows);						
						ImageStitch(index, image1, resImage, ColorComFrame);						
						cv::resize(ColorComFrame, ColorMainWindows, Size(1800, 300), 0, 0, INTER_NEAREST);													
						imshow("MainWindows", ColorMainWindows);						
						free(pNewImage); //测试用

						分辨率改变了,则刷新背景
						//if (m_sFrInfo.iWidth != pNewImage->head.iWidth || m_sFrInfo.iHeight != pNewImage->head.iHeight)
						//{
						//m_sFrInfo.iWidth = pNewImage->head.iWidth;
						//m_sFrInfo.iHeight = pNewImage->head.iHeight;
						//InvalidateRect(NULL);
						//}

						m_iDispFrameNum++;						
						if (flag)
						{
							//dst = ComFrame(Rect((int)(min(cur_pt.x, pre_pt.x)*6.4), (int)(min(cur_pt.y, pre_pt.y)*6.4), width, height));
							dst = ColorComFrame(Rect((int)(min(cur_pt.x, pre_pt.x)*6.4), (int)(min(cur_pt.y, pre_pt.y)*6.4), width, height));
							imshow("view", dst);							
						}						
					}
				}				
			}
		}
	}
	return 0;
}

 

 

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 海康相机是一种高性能的视频采集设备,能够支持实时的视频采集图像处理。通过海康相机,我们可以方便地获取高质量的图像数据,并进行后续的处理和分析。 具体来说,海康相机采用高清晰度的摄像头来获取图像,然后将图像数据传输到计算机或其他数据处理设备上。在采集过程中,海康相机也可以对图像进行实时的处理和调整,以便更好地适应不同的应用场景。 一旦采集图像数据,海康相机会将其保存在指定的储存设备(如硬盘或者存储卡)上。保存的格式通常是标准的图片格式(如JPEG、PNG等),方便后续的读取和处理。 总的来说,海康相机是一种非常实用和高效的图像采集设备,可以广泛应用于安防、医疗、机器视觉等众多领域。通过它,我们可以方便地获取大量高质量的图像数据,为后续的处理和分析提供更好的基础。 ### 回答2: 海康相机是一种高质量的监控设备,其采集图像功能是其重要的一个特点。在使用海康相机采集图像时,需要进行以下步骤: 1、选择需要监控的区域并安装海康相机。可以根据需要进行选择,比如室内、室外、大厅等。 2、连接相机和电源线。将相机连接到电源,确保其能正常运行。 3、连接网线或WiFi,使相机能与网络连接。 4、设置相机参数。可以设置图像分辨率、亮度、对比度等参数,以满足不同的监控需求。 5、开启相机,开始采集图像。一旦相机开始采集图像,它会实时显示图像,并将其保存在相机中。 6、需要保存图像数据时,可以通过相机自身提供的数据存储功能进行保存。也可以将数据传输到计算机或其他设备,并进行存储。 海康相机采集图像的过程需要确保设备连通、设置参数正确、采集范围合适。在保存图像数据时要注意安全性和便捷性,并进行备份以应对意外情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值