Как найти разницу между картинками?C#

Место общения программистов C#
Ответить
Anonymous
 Как найти разницу между картинками?

Сообщение Anonymous »

Я хочу написать программу на C# с emgu CV, чтобы сравнивать сотни фотографий и находить между ними разницу. Я знаю, что это сложно объяснить, но я хочу написать алгоритм, который сможет определить, что не так на картинке, у него есть изображение с ошибкой, и им нужно найти их все. Я не хочу использовать глубокое обучение только с emgu CV. Я пробую это с двумя картинками, но не знаю, как отметить на отмеченном_изображении1, только думаю, чего не хватает в img1 и есть на img2, а чего нет на img1, но отсутствует на img2, покажи это на отмеченном_изображении2
Извините за глупый вопрос, но иногда не знаю, как объяснить, чего я хочу

Код: Выделить всё

using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using System.Drawing;
using Emgu.CV.Util;

static void CompareImages()
{

Image img1 = new Image("test1/1.jpg");
Image img2 = new Image("test1/2.jpg");

Image diff1 = img1.AbsDiff(img2);
Image diff2 = img2.AbsDiff(img1);

Image grayDiff1 = diff1.Convert();
Image grayDiff2 = diff2.Convert();

Image thresholdImg1 = diff1.ThresholdBinary(new Gray(40), new Gray(255));
Image thresholdImg2 = diff2.ThresholdBinary(new Gray(40), new Gray(255));

VectorOfVectorOfPoint contours1 = new VectorOfVectorOfPoint();
Mat hierarchy1 = new Mat();
CvInvoke.FindContours(thresholdImg1, contours1, hierarchy1, RetrType.External, ChainApproxMethod.ChainApproxSimple);

VectorOfVectorOfPoint contours2 = new VectorOfVectorOfPoint();
Mat hierarchy2 = new Mat();
CvInvoke.FindContours(thresholdImg2, contours2, hierarchy2, RetrType.External, ChainApproxMethod.ChainApproxSimple);

for (int i = 0; i < contours1.Size; i++)
{
CircleF circle = CvInvoke.MinEnclosingCircle(contours1[i]);
CvInvoke.Circle(img1, new Point((int)circle.Center.X, (int)circle.Center.Y), 5, new MCvScalar(0, 0, 255), 2);
}

for (int i = 0; i < contours2.Size; i++)
{

CircleF circle = CvInvoke.MinEnclosingCircle(contours2[i]);
CvInvoke.Circle(img2, new Point((int)circle.Center.X, (int)circle.Center.Y), 5, new MCvScalar(0, 0, 255), 2);
}

img1.Save("marked_image1.jpg");
img2.Save("marked_image2.jpg");
}

CompareImages();
Я попробовал это с ChatGPT, но он потерпел неудачу, и я не нашел многих подобных мыслей.

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-pictures
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»