iOS无法初始化类型' const__unsage_unretained id *'

时间:2014-07-27 20:11:10

标签: objective-c opencv ios7

我正在做一个基于iOS和Opencv的项目。我需要获得检测到的轮廓的坐标。 我想要的是比较边缘'坐标和我手动绘制的点的坐标。 我尝试将轮廓的结果向量转换为NsArray。但那是我得到这个错误的地方。

以下是代码:

-(UIImage*)findContourPoints:(UIImage*) proceesingImage
{
    cv::Mat _image = [proceesingImage CVMat];
    cv::Mat pyr, timg, gray0(_image.size(), CV_8U), gray;
    int thresh = 50, N = 11;
    cv::pyrDown(_image, pyr, cv::Size(_image.cols/2, _image.rows/2));
    cv::pyrUp(pyr, timg, _image.size());
    std::vector<std::vector<cv::Point> > contours;
    for( int c = 0; c < 3; c++ ) {
        int ch[] = {c, 0};
        mixChannels(&timg, 1, &gray0, 1, ch, 1);
        for( int l = 0; l < N; l++ ) {
            if( l == 0 ) {
                cv::Canny(gray0, gray, 0, thresh, 5);
                cv::threshold(gray,gray,128,255,cv::THRESH_BINARY);
                cv::dilate(gray, gray, cv::Mat(), cv::Point(-1,-1));
            }
            else {
                gray = gray0 >= (l+1)*255/N;
            }
            cv::findContours(gray, contours, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
            std::vector<cv::Point> approx;

            for ( int i = 0; i< contours.size(); i++ ) {
                // draw contour
                cv::drawContours(_image, contours, i, cv::Scalar(255,255,255), 1, 1, std::vector<cv::Vec4i>(), 0, cv::Point());
            }
        }
    }
    NSArray *myArray = [NSArray arrayWithObjects:&contours[0] count:contours.size()];

    return [UIImage imageWithCVMat:_image];
}

或者有更好的解决方法吗?

1 个答案:

答案 0 :(得分:0)

你做不到! NSArray只能存储指向NSObject的指针。 NSArray会保留已存储的项目,此操作只能在NSObjects上完成。 请注意,contours包含一些C / C ++结构。

您有两种选择:在std::vector中保存数据或在NSData中保留数据并将其作为C结构的C数组进行威胁(第3个选项是装箱每个项目并将其存储在{{} 1}},但是无用的开销很大。) IMO在这里使用NSArray将无法获得任何收益。我会尽可能坚持使用C ++,只有最终结果转换为Objective-c个对象。