diff --git a/grayMatch.cpp b/grayMatch.cpp index a41c832..3d9fd06 100644 --- a/grayMatch.cpp +++ b/grayMatch.cpp @@ -505,6 +505,26 @@ double normalizeAngle(const double angle) { return angle - k * 360.0; } +void drawRegion(cv::Mat &img, const HRegion ®ion) { + auto *ptr = img.ptr(); + for (const auto &rle : region) { + auto *startPtr = ptr + rle.row * img.step + rle.startColumn; + for (int i = 0; i < rle.length; i++) { + *(startPtr + i) = 255; + } + } +} + +void drawRegion(cv::Mat &img, const VRegion ®ion) { + auto *ptr = img.ptr(); + for (const auto &rle : region) { + auto *startPtr = ptr + rle.startRow * img.step + rle.col; + for (int i = 0; i < rle.length; i++) { + *(startPtr + i * img.step) = 255; + } + } +} + Model *trainModel(const cv::Mat &src, int level, double startAngle, double spanAngle, double angleStep) { if (src.empty() || src.channels() != 1) { diff --git a/sum.cpp b/sum.cpp index 1a26adf..7380809 100644 --- a/sum.cpp +++ b/sum.cpp @@ -60,9 +60,9 @@ inline void computeSumDiff(const cv::v_uint16x8 &start, const cv::v_uint16x8 &en cv::v_int32x4 &diff0, cv::v_int32x4 &diff1) { cv::v_int16x8 sub; { - cv::v_int16x8 vStart = cv::v_reinterpret_as_s16(start); - cv::v_int16x8 vEnd = cv::v_reinterpret_as_s16(end); - sub = cv::v_sub(vEnd, vStart); + auto vStart = cv::v_reinterpret_as_s16(start); + auto vEnd = cv::v_reinterpret_as_s16(end); + sub = cv::v_sub(vEnd, vStart); } cv::v_int32x4 val = cv::v_expand_low(sub); @@ -138,7 +138,7 @@ void shiftH(const cv::Mat &src, const HRegion &hRegion, int row, cv::Mat &sum, c cv::v_int32x4 diff13 = cv::v_setzero_s32(); for (const auto &rle : hRegion) { - auto *startPtr = srcPtr + (row + rle.row) * src.step + rle.startColumn + i; + auto *startPtr = srcPtr + (row + rle.row) * src.step + rle.startColumn + i - 1; auto *endPtr = startPtr + rle.length; auto vStart = cv::v_load(startPtr); @@ -172,13 +172,13 @@ void shiftH(const cv::Mat &src, const HRegion &hRegion, int row, cv::Mat &sum, c int32_t partSum = 0; int32_t partSqSum = 0; for (const auto &rle : hRegion) { - auto *startPtr = srcPtr + (row + rle.row) * src.step + rle.startColumn + i; + auto *startPtr = srcPtr + (row + rle.row) * src.step + rle.startColumn + i - 1; auto *endPtr = startPtr + rle.length; - auto start = *startPtr; - auto end = *endPtr; - partSum += end - start; - partSqSum += end * end - start * start; + int32_t start = *startPtr; + int32_t end = *endPtr; + partSum += end - start; + partSqSum += end * end - start * start; } auto *sumPtrStart = sumPtr + i; @@ -196,7 +196,7 @@ void shiftV(const cv::Mat &src, const VRegion &vRegion, int row, cv::Mat &sum, c int32_t partSum = 0; int32_t partSqSum = 0; for (const auto &rle : vRegion) { - auto *startPtr = srcPtr + (row + rle.startRow) * src.step + rle.col; + auto *startPtr = srcPtr + (row + rle.startRow - 1) * src.step + rle.col; auto *endPtr = startPtr + rle.length * src.step; int32_t start = *startPtr;