|
|
@ -52,6 +52,16 @@ void Test_3D_cross_product() |
|
|
|
cout <<"Test cvPoint3D64f cross product: " << (pass ? "Passed" : "Failed") << std::endl; |
|
|
|
} |
|
|
|
|
|
|
|
void Test_UMat_MinMaxLoc() |
|
|
|
{ |
|
|
|
cv::UMat m(5, 5, CV_8UC1); |
|
|
|
m.setTo(255); |
|
|
|
double minVal, maxVal; |
|
|
|
cv::Point minLoc, maxLoc; |
|
|
|
cv::minMaxLoc(m, &minVal, &maxVal, &minLoc, &maxLoc); |
|
|
|
cout << "minVal: " << minVal << "; maxVal: " << maxVal << std::endl; |
|
|
|
} |
|
|
|
|
|
|
|
void Test_double_MulS() |
|
|
|
{ |
|
|
|
double val0[] = {0.1, 0.2, 0.3}; |
|
|
@ -177,25 +187,27 @@ void Test_MatchTemplate() |
|
|
|
|
|
|
|
void Test_SeamlessClone(int size) |
|
|
|
{ |
|
|
|
cv::Mat source = cv::imread("C:\\work\\sourceforge\\emgucv\\libs\\x64\\lena.jpg"); |
|
|
|
//cv::Mat source = cv::imread(".\\lena.jpg");
|
|
|
|
cv::Mat img1; |
|
|
|
cv::resize(source, img1, cv::Size(size, size)); |
|
|
|
cv::Mat img2; |
|
|
|
cv::resize(source, img2, cv::Size(size / 2, size / 2)); |
|
|
|
cv::Mat mask(img2.size(), CV_8UC1); |
|
|
|
int rows = mask.rows; |
|
|
|
int cols = mask.cols; |
|
|
|
int radius = (int)( (std::min)( rows, cols ) / 2.0 ); |
|
|
|
cv::circle(mask, cv::Point(mask.rows / 2, mask.cols / 2), radius, cv::Scalar(255), -1); |
|
|
|
|
|
|
|
cv::TickMeter meter; |
|
|
|
cv::Mat blend(img1.size(), CV_8UC3); |
|
|
|
meter.start(); |
|
|
|
cv::seamlessClone(img2, img1, mask, cv::Point(mask.rows / 2, mask.cols / 2), blend, cv::NORMAL_CLONE); |
|
|
|
meter.stop(); |
|
|
|
cout << "Seamless clone time: " << meter.getTimeMilli() << " milliseconds. " << std::endl; |
|
|
|
|
|
|
|
//cv::Mat source = cv::imread("C:\\work\\sourceforge\\emgucv\\libs\\x64\\lena.jpg");
|
|
|
|
cv::Mat source = cv::imread(".\\lena.jpg"); |
|
|
|
if (!source.empty()) |
|
|
|
{ |
|
|
|
cv::Mat img1; |
|
|
|
cv::resize(source, img1, cv::Size(size, size)); |
|
|
|
cv::Mat img2; |
|
|
|
cv::resize(source, img2, cv::Size(size / 2, size / 2)); |
|
|
|
cv::Mat mask(img2.size(), CV_8UC1); |
|
|
|
int rows = mask.rows; |
|
|
|
int cols = mask.cols; |
|
|
|
int radius = (int)((std::min)(rows, cols) / 2.0); |
|
|
|
cv::circle(mask, cv::Point(mask.rows / 2, mask.cols / 2), radius, cv::Scalar(255), -1); |
|
|
|
|
|
|
|
cv::TickMeter meter; |
|
|
|
cv::Mat blend(img1.size(), CV_8UC3); |
|
|
|
meter.start(); |
|
|
|
cv::seamlessClone(img2, img1, mask, cv::Point(mask.rows / 2, mask.cols / 2), blend, cv::NORMAL_CLONE); |
|
|
|
meter.stop(); |
|
|
|
cout << "Seamless clone time: " << meter.getTimeMilli() << " milliseconds. " << std::endl; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int main() |
|
|
@ -210,6 +222,8 @@ int main() |
|
|
|
//Test_GpuMatCopy();
|
|
|
|
Test_MatchTemplate(); |
|
|
|
|
|
|
|
Test_UMat_MinMaxLoc(); |
|
|
|
|
|
|
|
cout << "Size of CvSize (expected " << sizeof(int) * 2 << "): " << sizeof(CvSize) << std::endl; |
|
|
|
cout << "Size of CvPoint2D32f (expected " << sizeof(float) * 2 << "): " << sizeof(CvSize) << std::endl; |
|
|
|
cout << "Size of CvRect (expected " << sizeof(int) * 4 << "): " << sizeof(CvRect) << std::endl; |
|
|
|