2016-02-12 3 views
0

Я новичок в opencv и использую opencv3. Я пытаюсь обнаружить круги с использованием hough-transform .i есть this code, которые читают изображение из файла и обнаруживают круги, а затем пишут его файл.Это работает отлично. Есть оригинал image и вот detected один.Обнаружение круга с ошибкой после преобразования буферизованного изображения в Mat

но я хочу обнаружить круги в буферизованном изображении. Так что я использовал метод для преобразования буферизованного изображения в объект Mat. Затем произошло то, что обнаружено обнаружение круга, и изображение было изменено. Кроме того, яркость уменьшает слишком много. Это failed one.

здесь код я использовал для преобразования буферизованного изображения для коврика (взят из StackOverflow ответа)

public Mat bufferedImageToMat(BufferedImage bi) { 
    byte[] pixels = ((DataBufferByte) bi.getRaster().getDataBuffer()).getData(); 
    Mat mat = new Mat(bi.getWidth(), bi.getHeight(), CvType.CV_8UC3); 
    mat.put(0, 0, pixels); 
    return mat; 
} 

я думаю, что проблема заключается в вышеуказанном способе. это код строки 47 и 48.

Mat source = Imgcodecs.imread(circleimage, Imgcodecs.CV_LOAD_IMAGE_COLOR); 
//Mat source = bufferedImageToMat(bi); 

Если я использую 1-й (непосредственно прочитанный с изображения) код работает. Но если я использую обнаружение 2-го круга, то не получится.

Вы видите проблему в этом методе? благодаря

+2

в синтаксисе Си ++. Конструктор Mat использует параметры в другом порядке: 'Mat (rows, cols, type)', возможно, это то же самое для синтаксиса java? Пожалуйста, попробуйте 'new Mat (bi.getHeight(), bi.getWidth(), CvType.CV_8UC3);' – Micka

+1

@ Мика, о, да, вы правы .tnx вы так много. Пост это как ответ plz.it теперь работает –

ответ

1

В OpenCV, изображения представлены матрицами, у которых конструкторы используют ряд rows перед номером columns, так что вы должны использовать

Mat mat = new Mat(bi.getHeight(), bi.getWidth(), CvType.CV_8UC3); 

Я попытался объяснить причину в OpenCV Point(x,y) represent (column,row) or (row,column), если вы хотите чтобы узнать больше об этом.

+0

tnx you так много –

+1

Это очень хороший ответ. Сохранение в качестве цели для дубликатов: D – Miki