Commit b2c1dc1c 张士柳

1 个父辈 ad4417cb
......@@ -1860,7 +1860,10 @@ int eyemCountObjectIrregularParts(EyemImage tpImage, EyemRect tpRoi, const char
for (int n = 0; n < contourAll.size(); n++) {
cv::drawContours(image, contourAll, n, cv::Scalar(255), -1);
}
//防止报错
if (contourAll.empty()) {
return FUNC_CANNOT_CALC;
}
//寻找最大轮廓
std::vector<cv::Point> contourMax; double contourMaxArea = 0; cv::Point2f center; float radius;
contourMax = contourAll[0]; contourMaxArea = cv::contourArea(contourMax);
......
......@@ -327,10 +327,18 @@ static void nonLocalMeansFilter_SSE(cv::Mat& src, cv::Mat& dest, cv::Size temple
dpad = (16 - src.cols % 16) % 16;
spad = (16 - (src.cols + 2 * bbx) % 16) % 16;
}
else
{
dpad = (4 - src.cols % 4) % 4;
spad = (4 - (src.cols + 2 * bbx) % 4) % 4;
}
cv::Mat dst = cv::Mat::zeros(cv::Size(src.cols + dpad, src.rows), dest.type());
cv::Mat im;
copyMakeBorder(src, im, bby, bby, bbx, bbx + spad, borderType);
if (src.channels() == 1)
{
copyMakeBorder(src, im, bby, bby, bbx, bbx + spad, borderType);
}
//weight computation;
std::vector<float> weight(256 * src.channels());
......@@ -344,8 +352,12 @@ static void nonLocalMeansFilter_SSE(cv::Mat& src, cv::Mat& dest, cv::Size temple
w[i] = (float)v;
}
NonlocalMeansFilterInvorker8u_SSE4 body(im, dst, templeteWindowSize.width, templeteWindowSize.height, searchWindowSize.width, searchWindowSize.height, w);
cv::parallel_for_(cv::Range(0, dst.rows), body);
if (src.depth() == CV_8U)
{
NonlocalMeansFilterInvorker8u_SSE4 body(im, dst, templeteWindowSize.width, templeteWindowSize.height, searchWindowSize.width, searchWindowSize.height, w);
cv::parallel_for_(cv::Range(0, dst.rows), body);
}
cv::Mat(dst(cv::Rect(0, 0, dest.cols, dest.rows))).copyTo(dest);
}
......@@ -361,13 +373,25 @@ int eyemSmoothMean(EyemImage tpImage, int kSizew, int kSizeh, EyemImage *tpDstIm
return FUNC_OK;
}
int eyemNonLocalMeansFilter(EyemImage tpImage)
int eyemNonLocalMeansFilter(EyemImage tpImage, int iCMPSize, int iSearchSize, double dH, double dSigma)
{
cv::Mat image = cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage).clone();
if (image.empty()) {
return FUNC_IMAGE_NOT_EXIST;
}
//std::vector<cv::Mat> mvs(3);
//cv::split(image, mvs);
//mvs[0] = cv::imread("C:\\Users\\nzslw\\OneDrive\\程序\\VSProject\\eyemLib\\x64\\Debug\\Portada_paper_b.png", cv::IMREAD_GRAYSCALE);
//mvs[1] = cv::imread("C:\\Users\\nzslw\\OneDrive\\程序\\VSProject\\eyemLib\\x64\\Debug\\Portada_paper_g.png", 0);
//mvs[2] = cv::imread("C:\\Users\\nzslw\\OneDrive\\程序\\VSProject\\eyemLib\\x64\\Debug\\Portada_paper_r.png", 0);
cv::Mat dest;
//cv::merge(mvs, dest);
nonLocalMeansFilter_SSE(image, dest, cv::Size(3, 3), cv::Size(5, 5), 21.0, -1, 0);
cv::imwrite("Portada_paper5.png", dest);
return FUNC_OK;
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!