#include "hkcamerahalcon.h"
#include<windows.h>
typedef HWND(WINAPI *PROCGETCONSOLEWINDOW)();
hkCameraHalcon::hkCameraHalcon(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
}
hkCameraHalcon::~hkCameraHalcon()
{
}
//打开相机
void hkCameraHalcon::on_pushButton_clicked()
{
/************************************************************************/
/* 1.枚举设备 MV_CC_EnumDevices */
/************************************************************************/
//枚举子网内指定的传输协议对应的所有设备
unsigned int nTLayerType = MV_GIGE_DEVICE | MV_USB_DEVICE;
MV_CC_DEVICE_INFO_LIST m_stDevList = { 0 };
int nRet = MV_CC_EnumDevices(nTLayerType, &m_stDevList);
/*if (MV_OK != nRet)
{
printf("error: EnumDevices fail [%x]\n", nRet);
return;
}
int i = 0;
if (m_stDevList.nDeviceNum == 0)
{
printf("no camera found!\n");
return;
}*/
/************************************************************************/
/* 2.创建句柄 MV_CC_CreateHandle */
/************************************************************************/
//选择查找到的第一台在线设备,创建设备句柄
int nDeviceIndex = 0;
MV_CC_DEVICE_INFO m_stDevInfo = { 0 };
memcpy(&m_stDevInfo, m_stDevList.pDeviceInfo[nDeviceIndex], sizeof(MV_CC_DEVICE_INFO));
nRet = MV_CC_CreateHandle(&m_handle, &m_stDevInfo);
/*if (MV_OK != nRet)
{
printf("error: CreateHandle fail [%x]\n", nRet);
return;
}*/
/************************************************************************/
/* 3.打开设备 MV_CC_OpenDevice */
/************************************************************************/
//连接设备
//nRet = MV_CC_OpenDevice(m_handle, nAccessMode, nSwitchoverKey);
nRet = MV_CC_OpenDevice(m_handle);
/*if (MV_OK != nRet)
{
printf("error: OpenDevice fail [%x]\n", nRet);
return;
}*/
}
//采集图像
void hkCameraHalcon::on_pushButton_2_clicked()
{
/************************************************************************/
/* 4.开启抓图 MV_CC_StartGrabbing */
/************************************************************************/
//开始采集图像
nRet = MV_CC_StartGrabbing(m_handle);
/*if (MV_OK != nRet)
{
printf("error: StartGrabbing fail [%x]\n", nRet);
return;
}*/
//设置相机图像的像素格式
unsigned int enValue = PixelType_Gvsp_RGB8_Packed;
nRet = MV_CC_SetPixelFormat(m_handle, enValue);
if (MV_OK != nRet)
{
printf("error: SetPixelFormat fail [%x]\n", nRet);
return;
}
}
//获取一帧图像
void hkCameraHalcon::on_pushButton_3_clicked()
{
/************************************************************************/
/* 5.获取一帧并保存成图像 MV_CC_GetOneFrameTimeout MV_CC_SaveImage */
/************************************************************************/
//获取一帧数据的大小
MVCC_INTVALUE stIntvalue = { 0 };
nRet = MV_CC_GetIntValue(m_handle, "PayloadSize", &stIntvalue);
/*if (nRet != MV_OK)
{
printf("Get PayloadSize failed! nRet [%x]\n", nRet);
return;
}*/
int nBufSize = stIntvalue.nCurValue + 2048; //一帧数据大小+预留字节(用于SDK内部处理)
unsigned int nTestFrameSize = 0;
unsigned char* pFrameBuf = NULL;
pFrameBuf = (unsigned char*)malloc(nBufSize);
//采用MV_CC_GetOneFrame函数时
MV_FRAME_OUT_INFO stInfo;
memset(&stInfo, 0, sizeof(MV_FRAME_OUT_INFO));
//采用MV_CC_GetImageForRGB或者MV_CC_GetImageForBGR函数时
/*MV_FRAME_OUT_INFO_EX stInfo;
memset(&stInfo, 0, sizeof(MV_FRAME_OUT_INFO_EX));*/
//上层应用程序需要根据帧率,控制好调用该接口的频率
//此次代码仅供参考,实际应用建议另建线程进行图像帧采集和处理
/*while (1)
{*/
for (int in = 0; in <10 ; in++)
{
/*if (nTestFrameSize > 99)
{
break;
}*/
//pFrameBuf是相机采集到的一帧原始图像数据
nRet = MV_CC_GetOneFrame(m_handle, pFrameBuf, nBufSize, &stInfo);
//nRet = MV_CC_GetImageForBGR(m_handle,pFrameBuf, nBufSize, &stInfo, 1000);
////RGB24格式
//nRet = MV_CC_GetImageForRGB(m_handle, pFrameBuf, nBufSize, &stInfo, 1000);
/*************************************显示图像**************************************/
//获取窗口句柄
HWND MainWndID = (HWND)this->ui.label->winId();
//显示图像
//该接口需要在MV_CC_StartGrabbing之后调用,显示采集到的图像。如果相机当前采集图像是JPEG压缩的格式,则不支持调用该接口进行显示。
nRet = MV_CC_Display(m_handle, MainWndID);
if (MV_OK != nRet)
{
printf("error: Display fail [%x]\n", nRet);
return;
}
/**************************unsigned char* 图像转换为HObject************************/
int hgt = stInfo.nHeight;
int wid = stInfo.nWidth;
unsigned char * dataRed = new unsigned char[wid * hgt];
unsigned char * dataGreen = new unsigned char[wid * hgt];
unsigned char * dataBlue = new unsigned char[wid * hgt];
unsigned char * data = new unsigned char[wid * hgt * 3];
memcpy(data, pFrameBuf, wid * hgt * 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));
WriteImage(ho_Image, "bmp", 0, HTuple("E:/code/Photo/") + 1);
Sleep(500);
delete[] dataRed;
delete[] dataGreen;
delete[] dataBlue;
delete[] data;
/**********************************************************************************/
//if (MV_OK != nRet)
//{
// Sleep(10);
//}
//else
//{
// //图片数据输入输出参数
// MV_SAVE_IMAGE_PARAM stParam = { 0 };
// //源数据
// stParam.pData = pFrameBuf; //原始图像数据
// //nDataLen = stInfo.nWidth * stInfo.nHeight * 2 ;
// stParam.nDataLen = stInfo.nFrameLen; //原始图像数据长度
// stParam.enPixelType = stInfo.enPixelType; //原始图像数据的像素格式YUYV
// stParam.nWidth = stInfo.nWidth; //图像宽
// stParam.nHeight = stInfo.nHeight; //图像高
// //目标数据
// /**
// *
// *
// enum _MV_SAVE_IAMGE_TYPE_{
// MV_Image_Undefined = 0, //未定义
// MV_Image_Bmp = 1, //BMP图片
// MV_Image_Jpeg = 2, //JPEG图片
// MV_Image_Png = 3, //PNG图片,暂不支持
// MV_Image_Tif = 4, //TIF图片,暂不支持
// }MV_SAVE_IAMGE_TYPE
// *
// */
// stParam.enImageType = MV_Image_Bmp; //需要保存的图像类型,转换成JPEG格式
// //nBufSize = stInfo.nWidth * stInfo.nHeight * 2 + 2048;(输入数据为YUYV时)
// stParam.nBufferSize = nBufSize; //存储节点的大小
// unsigned char* pImage = (unsigned char*)malloc(nBufSize);
// stParam.pImageBuffer = pImage; //输出数据缓冲区,存放转换之后的图片数据
// // BMP图片大小:width * height * 3 + 2048(预留BMP头大小)(输入数据为YUYV时)
// //m_nBufSizeForSaveImage = stInfo.nWidth * stInfo.nHeight * 3 + 2048;
// //m_pBufForSaveImage = (unsigned char*)malloc(m_nBufSizeForSaveImage);
// //stParam.nBufferSize = m_nBufSizeForSaveImage; // 存储节点的大小
// //stParam.pImageBuffer = m_pBufForSaveImage;
// //MV_CC_SaveImage将原始图像数据转换成图片格式并保存在指定内存里。MV_CC_SaveImageEx
// nRet = MV_CC_SaveImage(&stParam);
// /*if (MV_OK != nRet)
// {
// break;
// }*/
// //将转换之后图片数据保存成文件
// FILE* fp = fopen("image", "wb");
// fwrite(pImage, 1, stParam.nImageLen, fp);
// //fwrite(m_pBufForSaveImage, 1, stParam.nImageLen, fp);
// fclose(fp);
// free(pImage);
// //...其他图像数据处理
// nTestFrameSize++;
//}
}
free(pFrameBuf);
}
//关闭相机
void hkCameraHalcon::on_pushButton_4_clicked()
{
/************************************************************************/
/* 6. 停止抓图 MV_CC_StopGrabbing */
/********************************************
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
海康相机 SDK二次开发 与 Halcon混合编程代码和说明手册 (204个子文件)
hkcamerahalcon.cpp 9KB
main.cpp 187B
hkCameraHalcon.VC.db 44.68MB
ClSerial.def 251B
ClProtocol.def 229B
hkCameraHalcon.vcxproj.filters 3KB
MvCameraControl.h 92KB
CameraParams.h 27KB
CLProtocol.h 25KB
Filestream.h 24KB
EnumClasses.h 22KB
CLPort.h 20KB
Container.h 18KB
NodeMapRef.h 17KB
NodeMapFactory.h 17KB
ClAllSerial.h 17KB
gencp_defines.h 17KB
ClSerial.h 13KB
IEnumerationT.h 13KB
GCException.h 12KB
INode.h 11KB
IFloat.h 11KB
Pointer.h 10KB
GCString.h 10KB
Types.h 10KB
GCSynch.h 10KB
GCUtilities.h 9KB
PixelType.h 9KB
IInteger.h 9KB
GCTypes.h 9KB
GCStringVector.h 8KB
Persistence.h 8KB
NodeCallback.h 8KB
GCRTSSUtilities.h 8KB
GCLinkage.h 7KB
CLog.h 7KB
INodeMapDyn.h 7KB
GettingStarted_StaticUseCaseParams.h 7KB
EventAdapterGEV.h 6KB
CLAllAdapter.h 6KB
ChunkPort.h 6KB
IString.h 6KB
Synch.h 6KB
MvGigEDevice.h 6KB
IPortRecorder.h 6KB
ClSerialTypes.h 5KB
IRegister.h 5KB
EventPort.h 5KB
IValue.h 5KB
PortImpl.h 5KB
StructPort.h 5KB
IBoolean.h 5KB
DeviceID.h 5KB
IEnumEntry.h 5KB
XMLExtractionTest_TestGenICamSupport_FloatingIntParams.h 5KB
PostprocessingTest_TestStaticParams.h 4KB
ISerial.h 4KB
config.h 4KB
ICommand.h 4KB
EventAdapterCL.h 4KB
ISelector.h 4KB
IPort.h 4KB
ChunkAdapter.h 4KB
IEnumeration.h 4KB
EventAdapterU3V.h 4KB
MvUsb3VDevice.h 4KB
config-win32.h 4KB
XMLID.h 4KB
IBase.h 4KB
Reference.h 4KB
ICategory.h 4KB
ISerialAdapterCStyle.h 4KB
ChunkAdapterDcam.h 3KB
Autovector.h 3KB
ChunkAdapterGeneric.h 3KB
INodeMap.h 3KB
GenICamVersion.h 3KB
PortWriteList.h 3KB
RegisterSetHelper.h 3KB
IDeviceInfo.h 3KB
MvErrorDefine.h 3KB
CLAutoBuffer.h 3KB
ISelectorDigit.h 3KB
IChunkPort.h 3KB
SelectorSet.h 3KB
MvDeviceBase.h 3KB
CVersion.h 3KB
GCError.h 3KB
ChunkAdapterGEV.h 3KB
convenience.h 3KB
ChunkAdapterU3V.h 3KB
CLException.h 3KB
GenApi.h 3KB
EventAdapter.h 3KB
EventAdapter1394.h 3KB
DLLLoad.h 3KB
Counter.h 2KB
EventAdapterGeneric.h 2KB
GenICamFwd.h 2KB
Compatibility.h 2KB
共 204 条
- 1
- 2
- 3
资源评论
- 不鸣~2019-01-11还以为是ip相机的呢 。尴尬了
因为有媛
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功