이미지의 일부를 추출하기 위해 GetSubImage
함수를 구현했습니다. SetROI
, Copy
및 ResetROI
을 사용합니다. 그러나 이것은 병렬 작업이 SetROI
이 병렬화가 불가능하므로 동일한 이미지를 사용할 때 작동하지 않습니다.OpenCV : 이미지의 일부를 추출하는 동시 GetSubImage
동시 실행 가능한 이미지 부분을 추출하는 다른 방법은 없습니까?
이미지의 일부를 추출하기 위해 GetSubImage
함수를 구현했습니다. SetROI
, Copy
및 ResetROI
을 사용합니다. 그러나 이것은 병렬 작업이 SetROI
이 병렬화가 불가능하므로 동일한 이미지를 사용할 때 작동하지 않습니다.OpenCV : 이미지의 일부를 추출하는 동시 GetSubImage
동시 실행 가능한 이미지 부분을 추출하는 다른 방법은 없습니까?
행렬의 일부만 가리키는 임시 매트릭스 머리글을 만들 수 있습니다. 그런 다음 해당 머리글에 copyTo()
멤버 함수를 사용할 수 있습니다. C++의 예 : 동시에 그것을 수행 할 수 있도록
Mat GetSubImage(const Mat& source, const Rect ®ion)
{
Mat dest;
Mat roi(source, region);
roi.copyTo(dest);
return dest;
}
이 방법은 데이터 나 source
의 헤더도이 조작에 의해 영향을받습니다.
마지막으로 이미지의 일부를 추출하려면이 함수를 사용하고 있습니다. C# 및 OpenCVSharp 래퍼와 함께 사용 :
static public IplImage GetSubImage(IplImage ipl, CvRect r)
{
CvMat submat;
CvMat mat = ipl.GetSubRect(out submat, r);
IplImage i = new IplImage(r.Width, r.Height, ipl.Depth, ipl.NChannels);
Cv.Copy(mat, i);
mat.Dispose();
submat.Dispose();
return i;
}
시간을내어 솔루션을 게시 해 주셔서 감사합니다! 그 정신이야! 나는 현대 API로 전환 할 것을 제안 할 수 있습니다. 그것은 OpenCV 2.0에서 소개되었으며 3.1 버전입니다. – ypnos
어떤 API입니까? 이 https://github.com/shimat/opencvsharp를 사용하고 있으며 매우 완벽하고 완벽합니다. –
예 OpenCVSharp에는 두 개의 API가 있습니다. 이전 OpenCV 1.x 버전과 새로운 OpenCV 2.x, 3.x 버전. https://github.com/shimat/opencvsharp#usage를 참조하십시오. CvMat, IplImage가 있습니까? 아니! 왜냐하면 그것들은 그들의 예제에서 사용하고있는 새로운 API이기 때문입니다. Mat == new, CvMat == old. – ypnos
감사합니다. 하지만 OpenCvSharp 라이브러리 및 CvMat 클래스를 사용하고 있습니다 thins 생성자가 없습니다 ... –
그게 무슨 소리 죠? 바로 거기에 있습니다 : http://shimat.github.io/opencvsharp/html/bf9a14ed-6ebb-704b-2372-7e104ef77196.htm – ypnos