私は、プレビューから青色のオブジェクトを検出し、drawcontour api を使用して黄色に変更する必要がある iPhone アプリに取り組んでいます。いろいろ試してみたのですが、輪郭が白い色で描かれています。よく検索しましたが、問題を解決できませんでした。私のコードは次のとおりです。
- (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;
}
現物
輪郭を描いた後
誰かがこれについて助けてください。前もって感謝します