#include "stdafx.h" #include "VisionMeasureClass.h" #include "BaseProcApi.h" CVisionMeasureClass::CVisionMeasureClass() { /* code */ } CVisionMeasureClass::~CVisionMeasureClass() { /* code */ } std::string CVisionMeasureClass::getVersion(void) { /* code */ return VERSION_NO; } int CVisionMeasureClass::doMeasurePos(unsigned char* img, int width, int height, double x1, double y1, double x2, double y2, double len, int threshold, double* xOutResult, double* yOutResult, double* cyOutResult, double* distOutResult, int& nOutResult) { /* code */ if (nullptr == img) return -1; if (width < 1 || height < 1) return -1; try { HalconCpp::HObject hImage; HalconCpp::GenImage1(&hImage, "byte", width, height, (Hlong)img); int nRet = doMeasurePosApi(hImage, x1, y1, x2, y2, len, threshold, 1.0f, xOutResult, yOutResult, cyOutResult, distOutResult, nOutResult); hImage.Clear(); return nRet; } catch (...) { return -1; } } int CVisionMeasureClass::doMeasurePosA(unsigned char* img, int width, int height, double sigma, MeasurePoint* measureResult1, int& outResult1, MeasurePoint* measureResult2, int& outResult2, MeasurePoint* measureResult3, int& outResult3, MeasurePoint* measureResult4, int& outResult4, MeasurePoint* measureResult5, int& outResult5, MeasurePoint* measureResult6, int& outResult6, MeasurePoint* measureResult7, int& outResult7) { /* code */ if (nullptr == img) return -1; HalconCpp::HObject hImage, hZoomImage, hMeanImage; HalconCpp::GenImage1(&hImage, "byte", width, height, (Hlong)img); int szHeight = (int)(0.5 * height); HalconCpp::ZoomImageSize(hImage, &hZoomImage, width, szHeight, "constant"); HalconCpp::MeanImage(hZoomImage, &hMeanImage, 1, 5); double xOutResult[MEASURE_MAX_NUM] = { 0 }; double yOutResult[MEASURE_MAX_NUM] = { 0 }; double cyOutResult[MEASURE_MAX_NUM] = { 0 }; double distOutResult[MEASURE_MAX_NUM] = { 0 }; int outNum = 0; int topEdge = 15; int botEdge = szHeight - 16; int step = (int)((botEdge - topEdge) / 6); int x1 = 5; int x2 = width - 6; for (int i = 0; i < 7; i++) { int y1 = topEdge + i * step; int y2 = y1; int threshold = 10; doMeasurePosApi(hMeanImage, x1, y1, x2, y2, 10, threshold, sigma, xOutResult, yOutResult, cyOutResult, distOutResult, outNum); if (0 == i) { outResult1 = outNum; for (int i = 0; i < outNum; i++) { measureResult1[i].x = xOutResult[i]; measureResult1[i].y = 2 * yOutResult[i]; measureResult1[i].cy = cyOutResult[i]; } } else if (1 == i) { outResult2 = outNum; for (int i = 0; i < outNum; i++) { measureResult2[i].x = xOutResult[i]; measureResult2[i].y = 2 * yOutResult[i]; measureResult2[i].cy = cyOutResult[i]; } } else if (2 == i) { outResult3 = outNum; for (int i = 0; i < outNum; i++) { measureResult3[i].x = xOutResult[i]; measureResult3[i].y = 2 * yOutResult[i]; measureResult3[i].cy = cyOutResult[i]; } } else if (3 == i) { outResult4 = outNum; for (int i = 0; i < outNum; i++) { measureResult4[i].x = xOutResult[i]; measureResult4[i].y = 2 * yOutResult[i]; measureResult4[i].cy = cyOutResult[i]; } } else if (4 == i) { outResult5 = outNum; for (int i = 0; i < outNum; i++) { measureResult5[i].x = xOutResult[i]; measureResult5[i].y = 2 * yOutResult[i]; measureResult5[i].cy = cyOutResult[i]; } } else if (5 == i) { outResult6 = outNum; for (int i = 0; i < outNum; i++) { measureResult6[i].x = xOutResult[i]; measureResult6[i].y = 2 * yOutResult[i]; measureResult6[i].cy = cyOutResult[i]; } } else if (6 == i) { outResult7 = outNum; for (int i = 0; i < outNum; i++) { measureResult7[i].x = xOutResult[i]; measureResult7[i].y = 2 * yOutResult[i]; measureResult7[i].cy = cyOutResult[i]; } } } return 1; } std::string CVisionMeasureClass::GetAppPathA(void) { /* code */ char szFilePath[MAX_PATH] = { 0 }, szDrive[MAX_PATH] = { 0 }, szDir[MAX_PATH] = { 0 }, szFileName[MAX_PATH] = { 0 }, szExt[MAX_PATH] = { 0 }; GetModuleFileNameA(NULL, szFilePath, sizeof(szFilePath)); _splitpath_s(szFilePath, szDrive, szDir, szFileName, szExt); std::string str(szDrive); str.append(szDir); return str; }