Здравствуйте. Есть у меня изображение которое содержит много разных кусочков.
Типа такого
По аналогии с текстурами. В общем мне нужен софт или сервис как можно на автомате найти все эти куски и вырезать их каждый в свое отдельное изображение.
Вроде помню для юнити как то делал так, но сейчас в упор не могу вспомнить чем и как.
Фотошоп тоже как выяснилось не умеет такое.
/// подпрограмма вырезки фрагментов из изображения
OpenCvSharp.Cv2.NamedWindow("debug", OpenCvSharp.WindowFlags.FreeRatio | OpenCvSharp.WindowFlags.GuiNormal);
using (OpenCvSharp.Mat imgorig = new OpenCvSharp.Mat(@"C:\Users\bobrov_ma\Pictures\img004.png", OpenCvSharp.ImreadModes.Unchanged))
using (OpenCvSharp.Mat img = new OpenCvSharp.Mat(@"C:\Users\bobrov_ma\Pictures\img004.png", OpenCvSharp.ImreadModes.Grayscale))
using (OpenCvSharp.Mat imgtmp = img.Clone())
{
OpenCvSharp.Cv2.BitwiseNot(img, img);
OpenCvSharp.Cv2.Dilate(img, img, null, null, 3);
int thres = 50;
while (true)
{
OpenCvSharp.Cv2.Threshold(img, imgtmp, thres, 255, OpenCvSharp.ThresholdTypes.Binary);
OpenCvSharp.Cv2.Dilate(imgtmp, imgtmp, null, null, 15);
OpenCvSharp.Cv2.Erode(imgtmp, imgtmp, null, null, 8);
//OpenCvSharp.Cv2.GaussianBlur(imgtmp, imgtmp, new OpenCvSharp.Size(3, 3), 0.3, 0.3);
OpenCvSharp.Cv2.Canny(imgtmp, imgtmp, 50, 255);
OpenCvSharp.Point[][] contrours = imgtmp.FindContoursAsArray(OpenCvSharp.RetrievalModes.External, OpenCvSharp.ContourApproximationModes.ApproxSimple);
OpenCvSharp.Point[] ActualCircle = null;
int max = int.MinValue;
OpenCvSharp.RotatedRect actualRect = new OpenCvSharp.RotatedRect();
int cnt = 0;
foreach (OpenCvSharp.Point[] cont in contrours)
{
if (cont.Length > 12)
{
OpenCvSharp.RotatedRect rct = OpenCvSharp.Cv2.MinAreaRect(cont);
imgorig[rct.BoundingRect()].SaveImage(@"C:\Delme\subsribes\" + (cnt++).ToString() + ".png");
}
}
//imgtmp.SaveImage("C:\\out.bmp");
OpenCvSharp.Cv2.ImShow("debug", imgtmp);
OpenCvSharp.Cv2.WaitKey(20);
}
}
Предварительно фон вырезал в фотошопе.
Причем так забавно … Ощутил на миг все могущество опыта … вспомнил как застал зарю OpenCV … версию 2,2 … даже пробовал поучавствовать в развитии … какой то метод оптимизировал и публиковал.
Сейчас через GIT обновил … это теперь прям система.
Чтобы реализовать код ушло буквально 30 минут … Понял уже после публикации вопроса. ))