iOS: как нарисовать цветовой контур с помощью OpenCV
Я работаю над приложением для iPhone, которое должно определить объект синего цвета из предварительного просмотра и изменить его на желтый цвет с помощью API drawcontour. Я много пробовал, но контур нарисован белым цветом. Я много искал, но не мог решить свою проблему. Мой код как следует:
- (void)viewDidLoad {
[super viewDidLoad];
self->videoCamera = [[CvVideoCamera alloc] initWithParentView:imageView];
self->videoCamera.delegate = self;
self->videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;
self->videoCamera.defaultAVCaptureSessionPreset =
AVCaptureSessionPreset352x288;
self->videoCamera.defaultAVCaptureVideoOrientation =
AVCaptureVideoOrientationPortrait;
self->videoCamera.grayscaleMode = NO;
self->videoCamera.defaultFPS = 30;
[videoCamera start];
}
Делегировать, чтобы получить кадры:
-(void)processImage:(cv::Mat &)image
{
cv::Mat image_copy = [self convertToYellow:image];
}
Метод конвертации
- (cv::Mat)convertToYellow:(cv::Mat)image
{
cv::Mat cameraFeed = image;
cv::Mat HSV, threshold;
cv::cvtColor(cameraFeed, HSV, CV_BGR2HSV);
cv::inRange(HSV, cvScalar(90,50,50), cvScalar(130,255,255), threshold);
cv::Mat erodeElement = getStructuringElement( cv::MORPH_RECT, cvSize(3,3));
//dilate with larger element so make sure object is nicely visible
cv::Mat dilateElement = getStructuringElement( cv::MORPH_RECT,cvSize(3,3));
erode(threshold,threshold,erodeElement);
erode(threshold,threshold,erodeElement);
dilate(threshold,threshold,dilateElement);
dilate(threshold,threshold,dilateElement);
cv::Mat temp;
threshold.copyTo(temp);
cv::vector< cv::vector<cv::Point> > contours;
cv::vector<cv::Vec4i> hierarchy;
findContours( temp, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0) );
bool objectFound = false;
if (hierarchy.size() > 0) {
for (int index = 0; index >= 0; index = hierarchy[index][0]) {
cv::Moments moment = moments((cv::Mat)contours[index]);
double area = moment.m00;
if(area > 500){
objectFound = true;
}else objectFound = false;
}
//let user know you found an object
if(objectFound ==true){
for(int i=0; i < contours.size() ; i++)
{
cv::drawContours(cameraFeed,contours,i,cvScalar(0,255,255),CV_FILLED);
}
}
}
return cameraFeed;
}
Актуальный объект
После того, как контур нарисован
Кто-нибудь, пожалуйста, помогите в этом. заранее спасибо