Opencv用图像

时间:2016-07-26 12:43:49

标签: c++ opencv image-processing

我是opencv的新手(具有android的背景,.net)。我在windows上测试opencv(用c ++编写),如果有效,我会把它移到android。

情境:

我有一张这样的照片: enter image description here

我想用另一张图片替换红圈(另一个人的脸)。

我已成功检测到红色圆圈并能够使用此代码绘制另一个圆圈:

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);

}

我的目标: 我的目标是用圆形画一幅图像。

提前致谢..

0 个答案:

没有答案