diff --git a/src/convertcolor.cpp b/src/convertcolor.cpp index 651cf46..41b7529 100644 --- a/src/convertcolor.cpp +++ b/src/convertcolor.cpp @@ -54,11 +54,14 @@ void ConvertColor_BGR2GRAY_BT709(const cv::Mat& src, cv::Mat& dst) void ConvertColor_BGR2GRAY_BT709_fpt(const cv::Mat& src, cv::Mat& dst) { - CV_Assert(CV_8UC3 == src.type()); + CV_Assert(CV_8UC3 == src.type()); cv::Size sz = src.size(); dst.create(sz, CV_8UC1); const int bidx = 0; + unsigned int coef1 = 0.2126f*pow(2,16) + .5f; + unsigned int coef2 = 0.7152f*pow(2,16) + .5f; + unsigned int coef3 = 0.0722f*pow(2,16) + .5f; for (int y = 0; y < sz.height; y++) { @@ -67,8 +70,8 @@ void ConvertColor_BGR2GRAY_BT709_fpt(const cv::Mat& src, cv::Mat& dst) for (int x = 0; x < sz.width; x++) { - float color = 0.2126 * psrc[x][2-bidx] + 0.7152 * psrc[x][1] + 0.0722 * psrc[x][bidx]; - pdst[x] = (int)(color + 0.5); + unsigned int color = (coef1 * psrc[x][2-bidx] + coef2 * psrc[x][1] + coef3 * psrc[x][bidx]); + pdst[x] = (int)((float)color/pow(2,16) + .5f); } } } diff --git a/test/test_skeleton.cpp b/test/test_skeleton.cpp index 3e0a330..781f32e 100644 --- a/test/test_skeleton.cpp +++ b/test/test_skeleton.cpp @@ -60,3 +60,62 @@ TEST(skeleton, resize_matches_opencv) // std::cout << "Difference:\n" << reference - result << std::endl; EXPECT_LT(maxDifference(reference, result), 2); } + +TEST(skeleton, 2_plus_2_equals_4) +{ + EXPECT_EQ(4, 2 + 2); +} + +TEST(skeleton, ConvertColorDoesNotChangeSize) +{ + Mat src(10, 20, CV_8UC3); + randu(src, Scalar::all(0), Scalar::all(255)); + Mat dst; + + ConvertColor_BGR2GRAY_BT709(src, dst); + + EXPECT_EQ(src.size, dst.size); +} + +TEST(skeleton, GuoHallThinningDoesNotChangeSize) +{ + Mat src(10, 20, CV_8UC1); + randu(src, Scalar(0), Scalar(255)); + Mat dst; + + GuoHallThinning(src, dst); + + EXPECT_EQ(src.size, dst.size); +} + +TEST(skeleton, ImageResizeSetsCorrectSize) +{ + Mat src(10, 20, CV_8UC1); + randu(src, Scalar(0), Scalar(255)); + Mat dst; + int firstSize = 4; + int secondSize = 5; + Size sz(firstSize, secondSize); + + ImageResize(src, dst, sz); + + EXPECT_EQ(true, ((dst.cols == firstSize) && (dst.rows == secondSize))); +} + +TEST(skeleton, ImageResizeSavesColor) +{ + Mat srcMtx(20, 16, CV_8UC1, Scalar(0)); + Mat dstMtx; + Mat expectedMtx(4, 5, CV_8UC1, Scalar(0)); + Size sz(4, 5); + + ImageResize(srcMtx, dstMtx, sz); + + double srcMin, srcMax; + minMaxLoc(srcMtx, &srcMin, &srcMax); + double dstMin, dstMax; + minMaxLoc(dstMtx, &dstMin, &dstMax); + EXPECT_EQ(dstMin, dstMax); + EXPECT_EQ(srcMin, dstMin); + EXPECT_EQ(srcMax, dstMax); +} \ No newline at end of file