Мое приложение работает для цветовой сегментации, но работает неправильно. Изображение справа внизу — это изображение HSV, но оно ОЧЕНЬ шумное и странное, и я понятия не имею, почему.
Это мой код:
Image<Bgr, Byte> frame_drone = null; //Original do drone
Image<Hsv, Byte> frame_drone_hsv = new Image<Hsv, Byte>(1280, 720); //processado drone hsv
Image<Gray,Byte> frame_drone_processado = new Image<Gray, Byte>(1280, 720); //processado drone
Image<Gray, Byte> frame_drone_canny = new Image<Gray, Byte>(1280, 720); //canny drone
int erosao = 3;
int dilatacao = 9;
StructuringElementEx elemento_erosao = new StructuringElementEx(erosao, erosao, 1, 1, Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT); //elemento kernelx,kernely,anchorx,anchory
StructuringElementEx elemento_dilatacao = new StructuringElementEx(dilatacao, dilatacao, 1, 1, Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT); //elemento kernelx,kernely,anchorx,anchory
frame_drone.SmoothMedian(3); //Filtro mediana antes da passagem para HSV
frame_drone_hsv = frame_drone.Convert<Hsv, Byte>().PyrDown().PyrUp(); //Converte a imagem da camera RGB para HSV
frame_drone_processado = frame_drone_hsv.InRange(new Hsv(hl.Value, sl.Value, vl.Value), new Hsv(hh.Value, sh.Value, vh.Value)); //utiliza as trackbars HSV para ver a cor pretendida
//Dilatacao seguida de erosao para fechar o ruido
CvInvoke.cvDilate(frame_drone_processado, frame_drone_processado, elemento_dilatacao, 1);
CvInvoke.cvErode(frame_drone_processado, frame_drone_processado, elemento_erosao, 1);
frame_drone_processado.SmoothGaussian(9); //Filtro gaussiano na imagem binaria
frame_drone_canny = frame_drone_processado.Canny(new Gray(50), new Gray (150)); //Canny
//Show Pictureboxes
picturebox_canny.Image = frame_drone_canny.Bitmap; // Mostra imagem canny
picturebox_hsv.Image = frame_drone_hsv.Bitmap; //mostra imagem hsv
processadamaster.Image = frame_drone_processado.Bitmap; //Mostra a imagem processada
originalmaster.Image = frame_drone.Bitmap; // Mostra a imagem original
Что случилось? Есть идеи? :/
Редактировать: я знаю, что диапазон оттенков составляет от 0 до 255. Я просто проверял, не было ли это 0-360, когда я делал фото
Редактировать 2: я попытался использовать функцию CvtColor, и программа закрылась.
CvInvoke.cvCvtColor(frame_drone, frame_drone_hsv, COLOR_CONVERSION.CV_BGR2HSV);
Ошибка: Exception thrown: 'Emgu.CV.Util.CvException' in Emgu.CV.dll
Но если я сделаю
CvInvoke.cvCvtColor(frame_drone, frame_drone, COLOR_CONVERSION.CV_BGR2HSV);
Он отлично работает, но у меня есть изображение HSV на исходном изображении, и я не могу использовать:
frame_drone_processado = frame_drone_hsv.InRange(new Hsv(hl.Value, sl.Value, vl.Value), new Hsv(hh.Value, sh.Value, vh.Value)); //utiliza as trackbars HSV para ver a cor pretendida
Потому что он говорит:
Cannot Convert Bgr to Hsv