Я новичок в 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-го круга, то не получится.
Вы видите проблему в этом методе? благодаря
в синтаксисе Си ++. Конструктор Mat использует параметры в другом порядке: 'Mat (rows, cols, type)', возможно, это то же самое для синтаксиса java? Пожалуйста, попробуйте 'new Mat (bi.getHeight(), bi.getWidth(), CvType.CV_8UC3);' – Micka
@ Мика, о, да, вы правы .tnx вы так много. Пост это как ответ plz.it теперь работает –