2015-06-01 5 views
5

enter image description hereIOS получить CGPoint от OpenCV сорта :: Точка

В изображении выше, мы можем увидеть точку, нарисованы на изображение, с помощью какой-то openCV algorithm.

Я хочу нарисовать точку UIView в этих точках, чтобы пользователь мог ее обрезать.

Я не понимаю, как получить доступ к этим пунктам, чтобы добавить uiview точек.

Я попытался прочитать cv::Point, но значение просто отличается (больше) от координат и высоты.

static cv::Mat drawSquares(cv::Mat& image, const std::vector<std::vector<cv::Point> >& squares) 
{ 

    int max_X=0,max_Y=0; 
    int min_X=999,min_Y=999; 
    for(size_t i = 0; i < squares.size(); i++) 
    { 
     const cv::Point* p = &squares[i][0]; 
     int n = (int)squares[i].size(); 

     NSLog(@"Squares%d %d %d",n,p->x,p->y); 

     polylines(image, &p, &n, 1, true, cv::Scalar(0,255,0), 3, cv::LINE_AA); 

    } 


    return image; 
} 

В коде выше, метод drawsquare рисовать квадраты .I имеют NSLog точку х, у координаты, но эти значения не w.r.t к системе устройства координат.

Может кто-нибудь помочь мне, как это может быть достигнуто Или альтернатива моему требованию.

Благодаря

+0

Таким образом, проблема здесь в том, что вы не в состоянии построить CropView (Polygon) на верхней части ImageView? Правильно? – Skynet

+0

Нет, я просто хочу преобразовать cv :: Point в CGPoint, чтобы я мог добавлять точки uiview в эти точки и добавлять функцию crop.cv::Point не являются корневыми устройствами. Есть ли какая-либо формула для ее преобразования. – Mukesh

+0

@muku У меня есть аналогичная проблема, смогли ли вы найти решение для этой cvpoint для cgpoint. – Dave

ответ

0

На самом деле Из-за размера изображения, координаты являются карты по-разному,

Для например. Если размер изображения находится в пределах границы экрана, то нет проблем, вы можете напрямую использовать cvPoint как CGPoint,

Но если это размер изображения 3000 * 2464, который является приблизительно размером с щелчком камеры, тогда у вас есть применим некоторую формулу.

Ниже путь я получил из Интернета, и это помогло мне извлечь CGPoint из cvPoint, когда размер изображения больше дена нашего размера экрана

Получите масштабный коэффициент изображения

- (CGFloat) contentScale 
{ 
CGSize imageSize = self.image.size; 
CGFloat imageScale = fminf(CGRectGetWidth(self.bounds)/imageSize.width, CGRectGetHeight(self.bounds)/imageSize.height); 
return imageScale; 
} 

Предположим, что это переменная cvPoint (переменная _pointA), а затем, используя приведенную ниже формулу, вы можете ее извлечь.

tmp = CGPointMake((_pointA.frame.origin.x)/scaleFactor, (_pointA.frame.origin.y)/scaleFactor); 
0

Это в Свифт 3.В Swift класс, который вы Возвращая cv::Points к:

  1. Получить x и y размеры изображения вы запись с камеры AV Capture сессии
  2. Разделить x и y размерность UIview вы используете, чтобы визуализировать изображение на размерах изображения при захвате сеанса в X и Y
  3. умножить Пункт x и y координаты по масштабируемых x и y размеров

{ 
    let imageScaleX = imgView.bounds.width/(newCameraHelper?.dimensionX)! 
    let imageScaleY = imgView.bounds.height/(newCameraHelper?.dimensionY)! 
    for point in Squares { 
     let x = point.x * imageScaleX 
     let y = point.y * imageScaleY 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^