海康相机采集图像 data (unsigned char*) 转QImage、Hobject、Mat

1 篇文章 0 订阅

转换数据格式RGB8、Mono8

MvGvspPixelType enDstPixelType = PixelType_Gvsp_Undefined;
		unsigned int nChannelNum = 0;
		//如果是彩色则转成RGB8
		if (mvCamera->IsColor(pFrameInfo->enPixelType))
		{
			nChannelNum = 3;
			enDstPixelType = PixelType_Gvsp_RGB8_Packed;
		}
		//如果是黑白则转换成Mono8
		else if (mvCamera->IsMono(pFrameInfo->enPixelType))
		{
			nChannelNum = 1;
			enDstPixelType = PixelType_Gvsp_Mono8;
		}
		
		int hgt = pFrameInfo->nHeight;
		int wid = pFrameInfo->nWidth;

		unsigned char *pConvertData = NULL;
		pConvertData = (unsigned char*)malloc(pFrameInfo->nWidth * pFrameInfo->nHeight * nChannelNum);
		unsigned int nConvertDataSize = pFrameInfo->nWidth * pFrameInfo->nHeight * nChannelNum;

		// ch:像素格式转换 | en:Convert pixel format 
		MV_CC_PIXEL_CONVERT_PARAM stConvertParam = { 0 };
		stConvertParam.nWidth = pFrameInfo->nWidth;                 //ch:图像宽 | en:image width
		stConvertParam.nHeight = pFrameInfo->nHeight;               //ch:图像高 | en:image height
		stConvertParam.pSrcData = pData;							//ch:输入数据缓存 | en:input data buffer
		stConvertParam.nSrcDataLen = pFrameInfo->nFrameLen;         //ch:输入数据大小 | en:input data size
		stConvertParam.enSrcPixelType = pFrameInfo->enPixelType;    //ch:输入像素格式 | en:input pixel format
		stConvertParam.enDstPixelType = enDstPixelType;                         //ch:输出像素格式 | en:output pixel format
		stConvertParam.pDstBuffer = pConvertData;                               //ch:输出数据缓存 | en:output data buffer
		stConvertParam.nDstBufferSize = nConvertDataSize;                       //ch:输出缓存大小 | en:output buffer size
		int nRet = MV_CC_ConvertPixelType(mvCamera->m_hDevHandle, &stConvertParam);

unsigned char * 转QImage

QImage image;
		if (mvCamera->IsMono(pFrameInfo->enPixelType))
		{
			image = QImage(pData, pFrameInfo->nWidth, pFrameInfo->nHeight, QImage::Format_Indexed8);
		}
		else if (mvCamera->IsColor(pFrameInfo->enPixelType))
		{
			image = QImage(pConvertData, pFrameInfo->nWidth, pFrameInfo->nHeight, QImage::Format_RGB888);//浅拷贝
		}
		QImage imageSend = image.copy();//深拷贝

unsigned char * 转HObject

		HObject ho_Image;
		if (mvCamera->IsMono(pFrameInfo->enPixelType))
		{
			int wh = wid* hgt;
			unsigned char* data= new unsigned char[wh];
			memcpy(data, pConvertData, wid * hgt);
			GenImage1(&ho_Image, "byte", wid, hgt, (Hlong)(data));
			emit mvCamera->sendDeviceGrabHalconResultSignal(sn, ho_Image);
			delete[]data;
			data = NULL;
		}
		else if (mvCamera->IsColor(pFrameInfo->enPixelType))
		{
			int wh = wid * hgt;
			//unsigned char*图像转换为HObject
			unsigned char*  dataRed = new unsigned char[wh];
			unsigned char* dataGreen = new unsigned char[wh];
			unsigned char* dataBlue = new unsigned char[wh];
			unsigned char* data = new unsigned char[wh * 3];
			memcpy(data, pConvertData, wh * 3);
			for (int i = 0; i < wid * hgt; i++)
			{
				dataRed[i] = data[3 * i];
				dataGreen[i] = data[3 * i + 1];
				dataBlue[i] = data[3 * i + 2];
			}
			GenImage3(&ho_Image, "byte", wid, hgt, (Hlong)(dataRed), (Hlong)(dataGreen), (Hlong)(dataBlue));
			emit mvCamera->sendDeviceGrabHalconResultSignal(sn, ho_Image);
			delete[] data;
			delete[] dataRed;
			delete[] dataGreen;
			delete[] dataBlue;
			data = NULL;
			dataRed = NULL;
			dataGreen = NULL;
			dataBlue = NULL;
		}

unsigned char*转Mat

cv::Mat srcImage;
    if (mvCamera->IsMono(pFrameInfo->enPixelType))
	{
		srcImage = cv::Mat(stImageInfo->stFrameInfo.nHeight, stImageInfo->stFrameInfo.nWidth, CV_8UC1, pData);
	}
	else if (mvCamera->IsColor(pFrameInfo->enPixelType))
	{
		RGB2BGR(pData, stImageInfo->stFrameInfo.nWidth, stImageInfo->stFrameInfo.nHeight);
		srcImage = cv::Mat(stImageInfo->stFrameInfo.nHeight, stImageInfo->stFrameInfo.nWidth, CV_8UC3, pData);
	}
int Coin::RGB2BGR(unsigned char* pRgbData, unsigned int nWidth, unsigned int nHeight)
{
	if (NULL == pRgbData)
	{
		return MV_E_PARAMETER;
	}
	for (unsigned int j = 0; j < nHeight; j++)
	{
		for (unsigned int i = 0; i < nWidth; i++)
		{
			unsigned char red = pRgbData[j * (nWidth * 3) + i * 3];
			pRgbData[j * (nWidth * 3) + i * 3] = pRgbData[j * (nWidth * 3) + i * 3 + 2];
			pRgbData[j * (nWidth * 3) + i * 3 + 2] = red;
		}
	}
	return MV_OK;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值