/// <summary> /// Отделяет изображение от фона /// </summary> /// <param name="source">Исходное изображение</param> /// <param name="destinatation">Результат разделения</param> private void separateBackground(IplImage source, IplImage destinatation) { // Преобразуем иходное изображение в HSV source.CvtColor(hsvImg, ColorConversion.RgbToHsv); // Разбиваем изображение на отельные каналы hsvImg.CvtPixToPlane(hImg, sImg, vImg, null); // Если диапазон Hue состоит из 2х частей if (BackgroundRange.HMin > BackgroundRange.HMax) { hImg.InRangeS(CvScalar.RealScalar(BackgroundRange.HMin), CvScalar.RealScalar(HsvRange.MAX_H), tmpImg); hImg.InRangeS(CvScalar.RealScalar(HsvRange.MIN_H), CvScalar.RealScalar(BackgroundRange.HMax), hImg); Cv.Or(tmpImg, hImg, hImg); } // Если диапазон Hue состоит из 1 части else { hImg.InRangeS(CvScalar.RealScalar(BackgroundRange.HMin), CvScalar.RealScalar(BackgroundRange.HMax), hImg); } // Ограничиваем значение остальных цветовых компонент sImg.InRangeS(CvScalar.RealScalar(BackgroundRange.SMin), CvScalar.RealScalar(BackgroundRange.SMax), sImg); vImg.InRangeS(CvScalar.RealScalar(BackgroundRange.VMin), CvScalar.RealScalar(BackgroundRange.VMax), vImg); // Формируем окончательный результат Cv.And(hImg, sImg, destinatation); Cv.And(destinatation, vImg, destinatation); Cv.Not(destinatation, destinatation); }
//yong's codes //yong's codes public static IplImage ConvertToBinaryIpl(IplImage target) { IplImage retImg = new IplImage(target.Width, target.Height, BitDepth.U8, 1); target.CvtColor(target, ColorConversion.BgrToCrCb); target.InRangeS(new CvScalar(0, 140, 40), new CvScalar(255, 170, 150), retImg); return(retImg); }
void preProcessing() { m_img = WebcamController.m_img; //CrCb컬러맵을 통해서 피부색부분 바이너리 뭐...그렇다고 m_img.CvtColor(m_img, ColorConversion.BgrToCrCb); m_img.InRangeS(new CvScalar(0, 140, 40), new CvScalar(255, 170, 150), m_skinBinaryImg); m_retImg = m_skinBinaryImg; }