1-е изображение, которое находится сверху, обнаружено, что поворот на 180 градусов работает правильно.
2-е изображение, находящееся посередине. Обнаружено 90 градусов, должно быть обнаружено как 180 градусов.
3-е изображение, обнаружено 180 градусов, должно быть обнаружено как 90 градусов.

[img]https://i. sstatic.net/GkWFv.jpg[/img]
У меня есть одно наблюдение, которым я хотел бы поделиться здесь: я обрезаю нежелательную часть изображения сверху и снизу карты панорамирования с помощью краски. кисть, это дает мне ожидаемый результат, используя приведенный ниже код.
Теперь я хотел понять, как я могу удалить ненужную часть с помощью программирования.
Я играл с контуром и областью ROI, но Я не могу понять, как подогнать то же самое. Я не могу понять, выбирает ли emgucv сам контур или мне нужно что-то сделать.
Предложите подходящий пример кода.
Пожалуйста, проверьте код ниже для определения угла и, пожалуйста, помогите мне. Заранее спасибо.
imgInput = new Image(impath);
Image img2 = imgInput.Convert();
Bitmap imgs;
Image imgout = imgInput.Convert().Not().ThresholdBinary(new Gray(50), new Gray(125));
VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
Emgu.CV.Mat hier = new Emgu.CV.Mat();
var blurredImage = imgInput.SmoothGaussian(5, 5, 0 , 0);
CvInvoke.AdaptiveThreshold(imgout, imgout, 255, Emgu.CV.CvEnum.AdaptiveThresholdType.GaussianC, Emgu.CV.CvEnum.ThresholdType.Binary, 5, 45);
CvInvoke.FindContours(imgout, contours, hier, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
if (contours.Size >= 1)
{
for (int i = 0; i edge2Magnitude ? edge1 : edge2;
double primaryMagnitude = edge1Magnitude > edge2Magnitude ? edge1Magnitude : edge2Magnitude;
PointF reference = new PointF(1, 0);
double refMagnitude = 1;
double thetaRads = Math.Acos(((primaryEdge.X * reference.X) + (primaryEdge.Y * reference.Y)) / (primaryMagnitude * refMagnitude));
double thetaDeg = thetaRads * 180 / Math.PI;
imgInput = imgInput.Rotate(thetaDeg, new Bgr());
imgout = imgout.Rotate(box.Angle, new Gray());
Bitmap bmp = imgout.Bitmap;
break;
}
}
Подробнее здесь: https://stackoverflow.com/questions/625 ... in-c-sharp
Мобильная версия