1.包含相机库目录
1.include
D:\中科\Ainstec3DViewer\AinstecCamSDK\AinstecCamSDK_CPP\include
2.lib
D:\中科\Ainstec3DViewer\AinstecCamSDK\AinstecCamSDK_CPP\lib\win
3.release
D:\中科\Ainstec3DViewer\AinstecCamSDK\AinstecCamSDK_CPP\bin
4.示例程序
D:\中科\Ainstec3DViewer\AinstecCamSDK\AinstecCamSDK_CPP\samples

5.pro文件路径
cpp
INCLUDEPATH += $$PWD/include/CamSDK
INCLUDEPATH += $$PWD/include/CamSDK/3rdparty
INCLUDEPATH += $$PWD/include/CamSDK/3rdparty/libtiff
INCLUDEPATH += $$PWD/include/CamSDK/3rdparty/opencv2
INCLUDEPATH += $$PWD/include/CamSDK/3rdparty/libtiff/include
LIBS += -L$$PWD/lib/CamSDK -lCameraPro
LIBS += -L$$PWD/lib/CamSDK -lCameraProd
LIBS += -L$$PWD/lib/CamSDK/3rdparty/opencv -lopencv_world410
LIBS += -L$$PWD/lib/CamSDK/3rdparty/opencv -lopencv_world410d
LIBS += -L$$PWD/lib/CamSDK/libtiff -ltiff
2.创建UI界面

3.根据示例程序开发
cpp
void ChaoFeng3D::SaveFrameDataFiles(AINSTEC::FrameData &frameData, const AINSTEC::CameraInfo& cameraInfo)
{
std::string path;
AINSTEC::create_outdir(path);
//The 'sendPoint3D' of outputSettings in CameraInfo needs to be configured to true
if (frameData.point3DSize > 0)
AINSTEC::save_point2pcd_b(frameData, path);
//The 'sendPoint3D, sendNormals, sendPointColor 'of outputSettings in CameraInfo needs to be configured to true
if (frameData.point3DSize > 0 && frameData.normalsSize > 0)
AINSTEC::save_point2ply_normal_color(frameData, path);
//The 'sendPoint3D, sendPointUV, sendTriangleIndices 'of outputSettings in CameraInfo needs to be configured to true
if (frameData.point3DSize > 0 && frameData.pointUVSize > 0 && frameData.triangleIndicesSize > 0)
AINSTEC::save_point2obj(frameData, path);
//The 'sendTexture'of outputSettings in CameraInfo needs to be configured to true
if (frameData.textureSize > 0)
AINSTEC::save_rgb(frameData.texture, &cameraInfo.camParam, path);
//The 'sendTexture, sendPointUV'of outputSettings in CameraInfo needs to be configured to true
if (frameData.textureSize > 0 && frameData.pointUVSize > 0)
AINSTEC::save_rgb_align_depth(frameData.texture, frameData, &cameraInfo.camParam, path);
//The 'sendDepthmap 'of outputSettings in CameraInfo needs to be configured to true
if (frameData.depthmapSize > 0) {
AINSTEC::save_deepmap2tiff(frameData.depthmap, &cameraInfo.camParam, path);
AINSTEC::save_deepmap(frameData.depthmap, &cameraInfo.camParam, path);
}
if (frameData.remapTexture != nullptr)
AINSTEC::save_ir(frameData.remapTexture, &cameraInfo.camParam, path, true);
if (frameData.point3D != nullptr && frameData.pointUV != nullptr) { // RGB图与点云的对应(映射)关系,常用于用RGB图分割点云
AINSTEC::save_IMG_DepthMap2tiff(frameData, cameraInfo.camParam, path);
}
}
void ChaoFeng3D::CaptureFrameDataConfigure(AINSTEC::CameraInfo & camInfo)
{
camInfo.outputSettings.sendPoint3D = true;
camInfo.outputSettings.sendPointUV = true;
camInfo.outputSettings.sendTriangleIndices = true;
camInfo.outputSettings.sendDepthmap = true;
camInfo.outputSettings.sendNormals = true;
camInfo.outputSettings.sendPointColor = true;
camInfo.outputSettings.sendTexture = true;
camInfo.outputSettings.sendRemapTexture = true;
if (camInfo.rgbStatus == AC_E_NOT_EXSIT) { // 不支持rgb相关操作
camInfo.outputSettings.sendPointUV = false;
camInfo.outputSettings.sendPointColor = false;
camInfo.outputSettings.sendTexture = false;
}
}
void ChaoFeng3D::PrintFrameDataInfo(const AINSTEC::FrameData &frameData, const AINSTEC::CameraInfo& cameraInfo)
{
std::cout << " Camera irWidth: " << cameraInfo.camParam.irWidth << std::endl;
std::cout << " Camera irHeight: " << cameraInfo.camParam.irHeight << std::endl;
std::cout << " Camera textureWidth: " << cameraInfo.camParam.textureWidth << std::endl;
std::cout << " Camera textureHeight: " << cameraInfo.camParam.textureHeight << std::endl << std::endl;
std::cout << " point3DSize: " << frameData.point3DSize << std::endl;
std::cout << " pointUVSize: " << frameData.pointUVSize << std::endl;
std::cout << " triangleIndicesSize: " << frameData.triangleIndicesSize << std::endl;
std::cout << " depthmapSize: " << frameData.depthmapSize << std::endl;
std::cout << " normalsSize: " << frameData.normalsSize << std::endl;
std::cout << " pointColorSize: " << frameData.pointColorSize << std::endl;
std::cout << " textureSize: " << frameData.textureSize << std::endl;
std::cout << " remapTextureSize: " << frameData.remapTextureSize << std::endl;
std::cout << " pointCount: " << frameData.pointCount << std::endl;
/*自己添加编写
point3D:3D 点云数据,存储格式为 xyzxyz......,其长
度为 point3DSize,与 irWidth * irHeight * 3 相同。点数
为 pointCount,与 point3DSize/3 相同; 1310000
*/
//012 345 678
qDebug()<<"x:="<<frameData.point3D[0];
qDebug()<<"y:="<<frameData.point3D[1];
qDebug()<<"z:="<<frameData.point3D[2];
//转换成为halcon数据
HTuple hv_x, hv_y, hv_z,hv_ObjectModel3D;
//*frameData.pointCount 点的个数
//*frameData.point3D =frameData.pointCount*3
for (int i=0;i<frameData.pointCount;i++)
{
hv_x[i]=frameData.point3D[i*3+0];
hv_y[i]=frameData.point3D[i*3+1];
hv_z[i]=frameData.point3D[i*3+2];
}
GenObjectModel3dFromPoints(hv_x, hv_y, hv_z, &hv_ObjectModel3D);
WriteObjectModel3d(hv_ObjectModel3D, "om3", "object55.om3", HTuple(), HTuple());
}
//More info is available after open camera
void ChaoFeng3D:: PrintCameraInfo(const std::vector<AINSTEC::CameraInfo> camInfoVector)
{
for (int i = 0; i < camInfoVector.size(); i++)
{
printf("[Camera index %d]:\n", i);
AINSTEC::CameraInfo cameraInfo = camInfoVector[i];
std::cout << " Camera IP: " << cameraInfo.cameraIP << std::endl;
std::cout << " Serial Number: " << cameraInfo.serialNum << std::endl;
std::cout << " Mac Address: " << cameraInfo.macAddr << std::endl;
std::cout << " Camera Version: " << cameraInfo.cameraSystemVersion << std::endl;
std::cout << " Model: " << cameraInfo.cameraModel << std::endl;
std::cout << " Is DHCP: " << (0 == cameraInfo.isDHCP ? "No" : "Yes") << std::endl;
std::cout << " Status: " << (AC_OK == cameraInfo.errorCode ? "Ready" : "Error") << std::endl;
}
}
int ChaoFeng3D::DiscoverCameras(AINSTEC::Camera * cameraPtr, AINSTEC::CameraInfo &cameraInfo)
{
//Get List of available devices on the network
std::vector<AINSTEC::CameraInfo> camInfoVector;
int ret = cameraPtr->DiscoverCameras(camInfoVector);
if (AC_OK != ret) {
std::cout << "No cameras found, ret :" << ret << std::endl;
AINSTEC::DestoryCamera(cameraPtr);
return ret;
}
//Print out camera info
PrintCameraInfo(camInfoVector);
//Select the camera to open, the default is the first one
unsigned int nIndex = 0;
if (camInfoVector.size() > 1)
{
std::cout << "Please Input camera index: " << std::endl;
cin >> nIndex;
if (nIndex >= camInfoVector.size() || nIndex < 0)
{
std::cout << "Input error, the default selection index is 0.\n" << std::endl;
nIndex = 0;
}
}
cameraInfo = camInfoVector[nIndex];
return ret;
}
//打开相机函数
int ChaoFeng3D::OpenCamera()
{
cameraPtr = AINSTEC::CreateCamera(AINSTEC::CamType::CamPro);
int ret = DiscoverCameras(cameraPtr, cameraInfo);
if (AC_OK != ret) {
std::cout << "Discover camera failed, ret :" << ret << std::endl;
return ret;
}
ret = cameraPtr->Open(cameraInfo);
if (AC_OK != ret) {
std::cout << "Camera open failed, ret :" << ret << std::endl;
AINSTEC::DestoryCamera(cameraPtr);
return ret;
}
//Configure the type of FrameData before capturing
CaptureFrameDataConfigure(cameraInfo);
//Configure TriggerMode to software trigger, TriggerMode defaults to the software trigger
cameraPtr->SetValue(cameraInfo, "TriggerMode", AINSTEC::CameraWorkMode::Camera_SoftTrigger);
return AC_OK;
}
//打开相机
void ChaoFeng3D::on_pB_OpenCamera_clicked()
{
OpenCamera();
}
//关闭相机
void ChaoFeng3D::on_pB_CloseCamera_clicked()
{
//Disconnect from camera
cameraPtr->Close(cameraInfo);
//Destory from camera
AINSTEC::DestoryCamera(cameraPtr);
}
//拍照
void ChaoFeng3D::on_pB_Capture3DPointCloud_clicked()
{
AINSTEC::FrameData frameData;
int ret = cameraPtr->Capture(cameraInfo, frameData);
if (AC_OK != ret) {
std::cout << "Camera Capture failed, ret :" << ret << std::endl;
AINSTEC::DestoryCamera(cameraPtr);
return ;
}
//Print out FrameData info
PrintFrameDataInfo(frameData, cameraInfo);
//Save FrameData in multiple formats
SaveFrameDataFiles(frameData, cameraInfo);
}
4.附录
在示例程序的函数中PrintFrameDataInfo需要打印添加自己的程序。需要导出C++
HALCON程序:
cpp
*读取三维点云
dev_get_window(WindowHandle)
dev_open_window(0, 0, 512, 512, 'black', WindowHandle1)
*彩色显示用的 0-----渐变色 ----伪彩图
GenParamNames := ['lut','intensity','light_position','disp_pose','alpha']
GenParamValues := ['color1','coord_z','0.0 0.0 -0.3 1.0','true',1]
* read_tuple('x', x)
* read_tuple('y', y)
* read_tuple('z', z)
* x:=[1,2]
* y:=[1,2]
* z:=[1,2]
* gen_object_model_3d_from_points(x, y, z, ObjectModel3D)
* write_object_model_3d(ObjectModel3D, 'om3', 'object55.om3', [], [])
read_object_model_3d('object55.om3', 'mm', [], [], ObjectModel3D, Status)
visualize_object_model_3d (WindowHandle1,ObjectModel3D, [],[], \
GenParamNames,GenParamValues, [], [],\
[], DispPose)