我是opencv的新手(具有android的背景,.net)。我在windows上测试opencv(用c ++编写),如果有效,我会把它移到android。
情境:
我想用另一张图片替换红圈(另一个人的脸)。
我已成功检测到红色圆圈并能够使用此代码绘制另一个圆圈:
Mat orig_image = cv::imread("testimg3.jpg", CV_LOAD_IMAGE_UNCHANGED);
Mat outImg;
double alpha = 0.5; double beta; double input;
if (orig_image.empty()){
cout << "No Image found." << endl;
return -1;
}
// Convert input image to HSV
cv::cvtColor(orig_image, outImg, COLOR_BGR2HSV);
// Threshold the HSV image, keep only the red pixels
Mat lower_red_hue_range;
Mat upper_red_hue_range;
inRange(outImg, cv::Scalar(0,100,100), cv::Scalar(10, 255, 255), lower_red_hue_range);
inRange(outImg, cv::Scalar(160, 100, 100), cv::Scalar(179, 255, 255), upper_red_hue_range);
cv::Mat red_hue_image;
cv::addWeighted(lower_red_hue_range, 1.0, upper_red_hue_range, 1.0, 0.0, red_hue_image);
// Use the Hough transform to detect circles in the combined threshold image
std::vector<cv::Vec3f> circles;
cv::HoughCircles(red_hue_image, circles, CV_HOUGH_GRADIENT, 1, red_hue_image.rows / 8, 100, 20, 100, 1000);
if (circles.size() == 0) std::exit(-1);
for (size_t current_circle = 0; current_circle < circles.size(); ++current_circle) {
cv::Point center(std::round(circles[current_circle][0]), std::round(circles[current_circle][1]));
int radius = std::round(circles[current_circle][2]);
cv::circle(orig_image, center, radius, cv::Scalar(0, 255, 0),CV_FILLED,8,0); //cv::circle(orig_image, center, radius, cv::Scalar(0, 255, 0),5);
}
我的目标: 我的目标是用圆形画一幅图像。
提前致谢..