2013-08-13 4 views
0

В моем коде, я не хочу, чтобы считывать данные с разгрома изображений, такие какКак передать данные Mat с помощью указателя данных изображений

cv::Mat img_1 = imread("F:\1.tif"); 

Вместо этого я хочу прочитать данные из указателя:

float* srcImage;//pointer to image data 
    cv::Mat img_1(height, width, CV_32FC1, srcImage); 

Однако, я обнаружил, что, таким образом, когда я использовал img_1 в следующей функции ORB, он не работает

cv::ORB orb; 
vector<cv::KeyPoint> keyPoints_1; 
cv::Mat descriptors_1; 
orb(img_1, cv::Mat(), keyPoints_1, descriptors_1); 

Как можно па I s данных в Mat из указателя? Есть ли разница между функцией imread() и передачей данных из указателя? Или, есть ли какой-либо специальный запрос в функции cv :: ORB?

Большое спасибо! Я не знаком с OpenCV, я просто начал использовать его в течение нескольких недель, мне просто нужно решить эту проблему, а остальная часть моего кода зависит от результатов этой части.

ответ

1

orb хочет получить 8-битное изображение в оттенках серого, а не CV_32FC1

+0

Большое спасибо. Я попробую другую функцию обнаружения функции. – lucky

+0

Вам не нужно попробовать другой детектор признаков (я полагаю, это то, что вы подразумеваете под «функцией обнаружения других функций»). ORB работает отлично. Вам просто нужно преобразовать изображение в оттенки серого и передать его в качестве аргумента в соответствие. Если вы не хотите изменять исходное изображение, создайте временную, которая хранит ее, но в оттенках серого. Во многих алгоритмах в компьютерном зрении было обнаружено, что уменьшение информации о цвете не только НЕ дает плохие результаты, но также улучшает производительность (особенно для хранения данных). – rbaleksandar