首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV -创建轮廓的边界框和圆- Xcode [Objective-C++]

OpenCV -创建轮廓的边界框和圆- Xcode [Objective-C++]
EN

Stack Overflow用户
提问于 2016-04-02 19:33:19
回答 1查看 1.1K关注 0票数 0

类似于我的问题已经发布了,但仍然有一些部分不适合我目前的问题。我使用Xcode和Objective C++来处理openCV。

我想做的是在照片中创建一些围绕人眼的边界框和圆圈。我使用了以下代码,但这不起作用:

代码语言:javascript
复制
-(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-function不保存我的图像。

有人能帮帮我吗?致以最好的问候,纳扎尔·梅德罗斯

EN

回答 1

Stack Overflow用户

发布于 2016-11-21 11:39:06

尝试将“绘图”转换为UIImage

代码语言:javascript
复制
- (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat
{
    NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize()*cvMat.total()];
    CGColorSpaceRef colorSpace;

    if (cvMat.elemSize() == 1) {
        colorSpace = CGColorSpaceCreateDeviceGray();
    } else {
        colorSpace = CGColorSpaceCreateDeviceRGB();
    }

    CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);

    // Creating CGImage from cv::Mat
    CGImageRef imageRef = CGImageCreate(cvMat.cols,                                 //width
                                        cvMat.rows,                                 //height
                                        8,                                          //bits per component
                                        8 * cvMat.elemSize(),                       //bits per pixel
                                        cvMat.step[0],                            //bytesPerRow
                                        colorSpace,                                 //colorspace
                                        kCGImageAlphaNone|kCGBitmapByteOrderDefault,// bitmap info
                                        provider,                                   //CGDataProviderRef
                                        NULL,                                       //decode
                                        false,                                      //should interpolate
                                        kCGRenderingIntentDefault                   //intent
                                        );


    // Getting UIImage from CGImage
    UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    CGDataProviderRelease(provider);
    CGColorSpaceRelease(colorSpace);

    return finalImage;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36372680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档