#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;
|
}
|