2014-05-25 2 views
0

나는 얼굴 인식과 관련된 프로젝트를 진행하고있다. 내 프로그램이 작동하려면 각 이미지가 img-> widthStep = 3 * img-> width의 조건을 만족해야한다.
각 이미지의 크기가 250x250 인 데이터베이스에서 코드를 작성하려고합니다. 그러나 데이터베이스의 widthstep은 752이므로 위 조건은 만족스럽지 않습니다. widthstep의 기능은 픽셀 (http://opencv-users.1802565.n2.nabble.com/What-is-widthstep-td2679559.html)에 액세스하는 것입니다.
이미지의 다른 매개 변수에 영향을주지 않고 widthstep 매개 변수를 750으로 변경할 수 있습니까?
다른 방법으로 img-> widthStep = 3 * img-> width를 얻을 수 있습니까? 내가 시도
한 가지 방법은 다음가 250x250 260x260에 이미지를 복사하여 것은 코드를이미지의 넓이를 바꾼다 opencv

Mat img1, img2=Mat::zeros(Size(260,260),CV_8UC3); 
img1 = imread(ch); 
img1.copyTo(img2.colRange(1,250).rowRange(1,250)); 

이다 그러나 오류 보여줍니다
OpenCV의 오류가 : 어설 션이 실패 (FixedSize (크기 고정)() || ((마 *)! obj) -> size.operator()() = = 알 수없는 함수의 파일 D : \ opencv2.4 \ opencv \ modules \ core \ src \ matrix.cpp 줄 1372
누구든지 나를 도울 수 있습니까?

감사합니다.

+0

다음을보십시오. http://answers.opencv.org/question/22742/create-a-memory-continuous-cvmat-any-api-could-do/ – Micka

답변

1
  1. 너는 용어 너비를 사용하고 있기 때문에 나는 당신이 IplImage를 사용하고 있다고 생각한다. IplImage는 Intel Performance Primitives (IPP) 라이브러리에서 가져온 것입니다. 좋은 성능을 얻으려면 각 행의 widthStep이 4의 배수 여야합니다.이 조건을 적용하려면 행에 추가 바이트가 채워져 있어야합니다. 따라서 IplImage를 사용하는 한 너비는 4의 배수가 아닌 750과 같을 수 있습니다.

  2. OpenCV 1은 IplImage를 기반으로했지만 OpenCV 2는 Mat를 기반으로합니다. IplImage가 사용되지 않아서 1 년이 지났습니다.

  3. 매트에는 그러한 제한이 없습니다. 기본적으로 그 단계는 질문의 편집 후 750

될 것입니다 :

colRange (1250)는 249 열, rowRange (1250)에 대한 동일하지 (250)를 의미한다. 복사되는 이미지의 크기가 대상 이미지의 크기와 다른 경우 대상 이미지가 다시 할당됩니다. 그러나 colRange 및 rowRange는 상수 임시 이미지를 반환하기 때문에 다시 할당 할 수 없으며 프로그램이 중단됩니다.

관련 문제