#include "camer_hk.h"
Camer_HK::Camer_HK()
{
handle = NULL;
InitLog("Camera","1.0.0");
}
bool Camer_HK::OpenCamera(QString ips)
{
unsigned int ipt = 0;
QStringList adressList = ips.split(".");
for(int i = 0; i<adressList.count();i++)
{
QString address = adressList.at(i);
ipt += address.toInt()<<((3-i)*8);
}
return OpenCamera(ipt);
}
bool Camer_HK::OpenCamera(unsigned int cameraIntIP)
{
int nRet = 0;
int nDeviceNum = -1;
MV_CC_DEVICE_INFO_LIST stDeviceList;
memset( &stDeviceList, 0, sizeof(MV_CC_DEVICE_INFO_LIST) );
// 1. 枚举设备
nRet = MV_CC_EnumDevices( MV_GIGE_DEVICE | MV_USB_DEVICE, &stDeviceList );
if ( MV_OK != nRet )
{
Log_Error( logger, "MV_CC_EnumDevices fail! nRet %x", nRet );
return false;
}
if (stDeviceList.nDeviceNum < 0)
{
Log_Error( logger, "Device Num less than 0");
return false;
}
for(int i =0; i < (int)stDeviceList.nDeviceNum; i++ )
{
if(cameraIntIP == stDeviceList.pDeviceInfo[i]->SpecialInfo.stGigEInfo.nCurrentIp)
{
nDeviceNum = i;
break;
}
continue;
}
if(nDeviceNum < 0)
{
Log_Error( logger, "Not Find Camera Device....");
return false;
}
// 2. 选择设备并创建句柄
nRet = MV_CC_CreateHandle( &handle, stDeviceList.pDeviceInfo[nDeviceNum] );
if (MV_OK != nRet)
{
Log_Error( logger, "MV_CC_CreateHandle fail! nRet %x", nRet );
return false;
}
// 3.打开设备
nRet = MV_CC_OpenDevice( handle );
if (MV_OK != nRet)
{
Log_Error( logger, "MV_CC_OpenDevice fail! nRet %x", nRet );
return false;
}
//获取相机图像基本信息
MV_IMAGE_BASIC_INFO mstruBasicInfo = {0};
nRet = MV_CC_GetImageInfo(handle, &mstruBasicInfo);
img_width = mstruBasicInfo.nWidthValue;
img_height = mstruBasicInfo.nHeightValue;
imageData = (uchar * )malloc(sizeof(uchar) * img_width * img_height );
//设置图片格式
nRet = MV_CC_SetPixelFormat( handle, PixelType_Gvsp_Mono8 );
if (MV_OK != nRet)
{
Log_Error( logger, "MV_CC_SetPixelFormat fail! nRet %x", nRet );
return false;
}
//打开触发模式
nRet = MV_CC_SetTriggerMode( handle, MV_TRIGGER_MODE_ON ) ;
if (MV_OK != nRet)
{
Log_Error( logger, "MV_CC_SetTriggerMode fail! nRet %x", nRet );
return false;
}
//设置软触发
nRet = MV_CC_SetTriggerSource( handle, MV_TRIGGER_SOURCE_SOFTWARE );
if (MV_OK != nRet)
{
Log_Error( logger, "MV_CC_SetTriggerSource fail! nRet %x", nRet );
return false;
}
//注册回调函数
nRet = MV_CC_RegisterImageCallBack( handle, ImageCallBack, this );
if (MV_OK != nRet)
{
Log_Error( logger, "MV_CC_RegisterImageCallBack fail! nRet %x", nRet );
return false;
}
//开始抓图
nRet = MV_CC_StartGrabbing( handle );
if( MV_OK != nRet )
{
Log_Error( logger, "MV_CC_StartGrabbing fail! nRet %x", nRet );
return false;
}
Log_Debug( logger, "open camera success");
return true;
}
bool Camer_HK::SetExpTime(int ExpTime)
{
int nRet = 0;
nRet = MV_CC_SetExposureTime( handle, 1.0f*ExpTime );
if ( MV_OK != nRet )
{
Log_Error( logger, "MV_CC_SetExposureTime fail! nRet %x", nRet );
return false;
}
return true;
Log_Debug( logger, "Set Exposure Time end....");
}
Mat Camer_HK::GetOneFrame()
{
Log_Debug(logger,"GetOneFrame Start");
Mat img;
long tm_start,tm_end;
int nRet = 0;
nRet = MV_CC_TriggerSoftwareExecute( handle );
if ( MV_OK != nRet )
{
Log_Error( logger, "MV_CC_TriggerSoftwareExecute fail! nRet %x", nRet );
return img;
}
tm_start = clock();
while ( true)
{
tm_end = clock();
if( tm_end - tm_start > 3000)
{
Log_Error( logger, " Get Camera Photo out of time" );
return img;
}
if(takePhotoFinish == 1)
{
Log_Debug( logger, "takePhotoFinish");
img = Mat(img_height, img_width, CV_8UC1,imageData );
break;
}
}
takePhotoFinish = 0;
Log_Debug( logger, "Get One Frame End");
return img;
}
uchar *Camer_HK::getImageData()
{
if( nullptr != imageData )
{
return imageData;
}
return nullptr;
}
QImage Camer_HK::MatToQImage(const Mat &mat)
{
// 8-bits unsigned, NO. OF CHANNELS = 1
if(mat.type() == CV_8UC1)
{
QImage image(mat.cols, mat.rows, QImage::Format_Indexed8);
// Set the color table (used to translate colour indexes to qRgb values)
image.setColorCount(256);
for(int i = 0; i < 256; i++)
{
image.setColor(i, qRgb(i, i, i));
}
// Copy input Mat
uchar *pSrc = mat.data;
for(int row = 0; row < mat.rows; row ++)
{
uchar *pDest = image.scanLine(row);
memcpy(pDest, pSrc, mat.cols);
pSrc += mat.step;
}
return image;
}
// 8-bits unsigned, NO. OF CHANNELS = 3
else if(mat.type() == CV_8UC3)
{
// Copy input Mat
const uchar *pSrc = (const uchar*)mat.data;
// Create QImage with same dimensions as input Mat
QImage image(pSrc, mat.cols, mat.rows, (int)mat.step, QImage::Format_RGB888);
return image.rgbSwapped();
}
else if(mat.type() == CV_8UC4)
{
// Copy input Mat
const uchar *pSrc = (const uchar*)mat.data;
// Create QImage with same dimensions as input Mat
QImage image(pSrc, mat.cols, mat.rows, (int)mat.step, QImage::Format_ARGB32);
return image.copy();
}
else
{
return QImage();
}
}
void Camer_HK::ImageCallBack(unsigned char *pData, MV_FRAME_OUT_INFO *pFrameInfo, void *pUser)
{
Camer_HK *cameraData = (Camer_HK * )pUser;
Log_Debug(cameraData->logger,"ImageCallBack Start");
int imageSize = pFrameInfo->nFrameLen;
memcpy( cameraData->imageData, pData, imageSize );
cameraData->takePhotoFinish = 1;
Log_Debug(cameraData->logger,"ImageCallBack End")
}
void Camer_HK::InitLog(QString logname, QString sys_version)
{
QDir dir;
bool exist = dir.exists( "./debug_message" );
if(!exist)
{
dir.mkpath( "./debug_message" );
}
logger = Logger::getLogger( "Camera" );
helpers::Pool p;
PatternLayoutPtr layout = new PatternLayout();
LogString conversionPattern = LogString( Log_Layout );
layout->setConversionPattern( conversionPattern );
LogString LogPath = ( L"./debug_message/" + logname.toStdWString() + L".log" );
DailyRollingFileAppenderPtr rollingfileAppender = new DailyRollingFileAppender();
rollingfileAppender->setFile(LogPath);
rollingfileAppender->setAppend(false);
rollingfileAppender->setDatePattern(DatePattern);
rollingfileAppender->setLayout(LayoutPtr(layout));
rollingfileAppender->activateOptions(p);
rollingfileAppender->setEncoding(L"UTF-8");
rollingfileAppender->setName(L"rollingfileAppender");
logger->addAppender(AppenderPtr(rollingfileAppender));
logger->setAdditivity(false);//不继承root设置
logger->setLevel(Level::getTrace());
Log_Info(logger,"\n\n\n"
" start %s system!! "
"\n\n"
"************************** %s %s--%s ********************* "
"\n\n",
logname.toLatin1().data(), sys_version.toLatin1().data(), __DATE__, __TI
没有合适的资源?快使用搜索试试~ 我知道了~
海康工业相机二次开发源码 + OpenCV344源码
共423个文件
hpp:184个
h:178个
hh:48个
1星 需积分: 5 102 下载量 124 浏览量
2019-02-23
14:43:02
上传
评论 13
收藏 40.74MB RAR 举报
温馨提示
基于Qt平台的海康相机二次开发。压缩包文件没有完整的工程文件。 其中包含文件有: 1.动态链接库及头文件 2.Camer_HK类 导入相机类到自己的工程文件,并在.pro配置好相关的路径,即可使用。 需注意的是,类中使用了OpenCV,因此也需配置OpenCV的相关.pro路径
资源推荐
资源详情
资源评论
收起资源包目录
海康工业相机二次开发源码 + OpenCV344源码 (423个子文件)
camer_hk.cpp 8KB
ClSerial.def 251B
ClProtocol.def 229B
opencv_world344d.dll 115.2MB
opencv_world344.dll 73.45MB
opencv_ffmpeg344_64.dll 17.22MB
MvCameraControl.Net.dll 35KB
core_c.h 128KB
MvCameraControl.h 92KB
types_c.h 70KB
imgproc_c.h 51KB
kmeans_index.h 36KB
videoio_c.h 36KB
dist.h 27KB
CameraParams.h 27KB
hierarchical_clustering_index.h 26KB
CLProtocol.h 25KB
Filestream.h 24KB
cvdef.h 22KB
EnumClasses.h 22KB
autotuned_index.h 21KB
CLPort.h 20KB
kdtree_single_index.h 20KB
calib3d_c.h 20KB
kdtree_index.h 19KB
Container.h 18KB
lsh_table.h 18KB
types_c.h 18KB
NodeMapRef.h 17KB
NodeMapFactory.h 17KB
ClAllSerial.h 17KB
gencp_defines.h 17KB
cv_cpu_helper.h 16KB
lsh_index.h 15KB
result_set.h 15KB
ClSerial.h 13KB
IEnumerationT.h 13KB
GCException.h 12KB
tracking_c.h 11KB
INode.h 11KB
IFloat.h 11KB
highgui_c.h 11KB
index_testing.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
any.h 8KB
Persistence.h 8KB
NodeCallback.h 8KB
GCRTSSUtilities.h 8KB
hdf5.h 7KB
GCLinkage.h 7KB
CLog.h 7KB
INodeMapDyn.h 7KB
GettingStarted_StaticUseCaseParams.h 7KB
EventAdapterGEV.h 6KB
CLAllAdapter.h 6KB
allocator.h 6KB
ChunkPort.h 6KB
composite_index.h 6KB
nn_index.h 6KB
objdetect_c.h 6KB
IString.h 6KB
all_indices.h 6KB
Synch.h 6KB
saving.h 6KB
MvGigEDevice.h 6KB
simplex_downhill.h 6KB
IPortRecorder.h 6KB
cv_cpu_dispatch.h 5KB
ClSerialTypes.h 5KB
IRegister.h 5KB
EventPort.h 5KB
IValue.h 5KB
PortImpl.h 5KB
imgcodecs_c.h 5KB
cvconfig.h 5KB
StructPort.h 5KB
IBoolean.h 5KB
DeviceID.h 5KB
cap_ios.h 5KB
IEnumEntry.h 5KB
XMLExtractionTest_TestGenICamSupport_FloatingIntParams.h 5KB
PostprocessingTest_TestStaticParams.h 4KB
ISerial.h 4KB
config.h 4KB
dynamic_bitset.h 4KB
interface.h 4KB
ICommand.h 4KB
defines.h 4KB
EventAdapterCL.h 4KB
ISelector.h 4KB
random.h 4KB
heap.h 4KB
共 423 条
- 1
- 2
- 3
- 4
- 5
资源评论
- 小任同学Alex2020-12-29注意:压缩包文件没有完整的工程文件。。。。是官方的包
a2583211
- 粉丝: 5
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 微信小程序源码 车源宝 二手车交易平台 源码下载
- 微信小程序源码 实现 城市切换 demo 根据城市首字母排序城市 选择城市 源码下载
- VMware7.0虚拟机硬盘无法编辑,无法连接到Profile-Driven Storage Service
- arm64内核的mongo镜像
- 基于stm32f103c单片机+MPU6050+0.96英寸OLED显示屏双柄遥控器硬件(原理图+PCB)工程文件.zip
- 整理的关于少儿编程的学习路径,以及如何在小升初,初升高和大学充分的利用起来编程经验的优势
- nhit完整源码+论文学习
- 足球比赛结果统计表2006-2011年大约28W场比赛
- 基于PHP+mysql的社区交流系统(源代码)
- yolov5,SSD 可能使用到的一些代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功