0
私のような同様の質問がすでに掲載されていましたが、私の現在の問題に適合しない部分があります。 Xcode とObjective C++を使ってopenCVを扱いました。OpenCV - 等高線の境界ボックスと円を作成する - Xcode [Objective-C++]
私がしたいことは、写真の人間の目の周りにいくつかの境界ボックスと円を作成することです。私は、次のコードを使用しているが、これは動作しません:
-(void)detectEye {
cv::Mat src_gray;
int thresh = 100;
RNG rng(12345);
NSString *path = @"/Users/NazarMedeiros/Desktop/image.jpg";
cv::Mat src = cv::imread("/Users/NazarMedeiros/Downloads/face.jpg");
if (src.empty())
return;
cv::cvtColor(src, src_gray, CV_BGR2GRAY);
cv::blur(src_gray, src_gray, cv::Size(3,3));
cv::Mat threshold_output;
std::vector<std::vector<cv::Point> > contours;
std::vector<Vec4i> hierarchy;
/// Detect edges using Threshold
cv::threshold(src_gray, threshold_output, thresh, 255, THRESH_BINARY);
/// Find contours
cv::findContours(threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));
/// Approximate contours to polygons + get bounding rects and circles
std::vector<std::vector<cv::Point> > contours_poly(contours.size());
std::vector<cv::Rect> boundRect(contours.size());
std::vector<Point2f>center(contours.size());
std::vector<float>radius(contours.size());
for(int i = 0; i < contours.size(); i++) {
cv::approxPolyDP(cv::Mat(contours[i]), contours_poly[i], 3, true);
boundRect[i] = cv::boundingRect(cv::Mat(contours_poly[i]));
cv::minEnclosingCircle((cv::Mat)contours_poly[i], center[i], radius[i]);
}
/// Draw polygonal contour + bonding rects + circles
Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
for(int i = 0; i < contours.size(); i++) {
cv::Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255));
cv::drawContours(drawing, contours_poly, i, color, 1, 8, std::vector<Vec4i>(), 0, cv::Point());
cv::circle(drawing, center[i], (int)radius[i], color, 2, 8, 0);
}
imwrite([path UTF8String], src);}
} 関数imwrite機能は、
誰も私を助けることができる...私のイメージをしてください保存しませんか? 敬具、 ナザールメデイロス
てみUIImageに "描画" に変換してください。 UIImage * image = MatToUIImage(img); –