2016-10-05 4 views
0

이미지를 가로/세로 늘이기를 원하지만 각 픽셀 행은 행 또는 행 번호의 위치에 따라 다른 크기가 필요합니까?OpenCV - 이미지의 각 픽셀 행을 서로 다르게 스케일/스트레치?

나는 소스 이미지를 1 행 씩 잘라내어 1 픽셀 씩 자르고 크기를 조정하여 각 행을 원하는대로 다르게하고 마지막으로 결과 이미지에 픽셀 크기 조정 행을 복사합니다. 여기에 내 코드가 있습니다. :

 cv::Rect rowCropRect = cv::Rect(0,i, imgOut.size().width, 1); 
     cv::Size scaledSize = cv::Size((1.f - smallFrameRatio) * rowCropRect.size().width, 1); 

     if (smallestWidth < scaledSize.width) 
      smallestWidth = scaledSize.width; 

     Mat eachRowCrop(imgIn, rowCropRect); 
     resize(eachRowCrop, eachRowCrop, scaledSize); 

     rowCropRect.x = (imgIn.size().width - eachRowCrop.size().width) * 0.5f; 
     rowCropRect.width = eachRowCrop.size().width; 

     if (rowCropRect.x < 0) rowCropRect.x = 0; 
     if (rowCropRect.width >= imgOut.size().width) rowCropRect.width = imgOut.size().width - 5; 

     eachRowCrop.copyTo(imgOut(rowCropRect)); 
     eachRowCrop.release(); 

나는 루프의 각 행을 반복하여이 작업을 수행합니다. 그러나 느리고 결과적인 변형은 충분하지 않습니다.

cv :: resize()가 내부적으로 사용하는 보간 연산을 사용하거나 다른 효율적인 방법을 사용하여 픽셀 수준에서 직접 처리 할 수 ​​있기를 원합니다.

아이디어가 있으십니까?

SourceImage :

enter image description here

ResultImage : this tutorial에서 설명한 바와 같이

enter image description here

+0

[warpPerspective] (http://docs.opencv.org/2.4.0/modules/imgproc/doc/geometric_transformations.html#warpperspective) – slawekwin

+0

감사합니다. 본 적이 있지만 모릅니다. 3x3 변형 행렬을 준비 할 수 있습니까? 왜냐하면 제 경우에는 각 행에 적용해야하는 눈금의 양을 알고 있기 때문에 이미지의 모든 행마다 다릅니다. ? 그러한 변환을 준비하는 데 필요한 아이디어와 어떤 행 번호에 적용 할 스케일을 알려주는 방법? –

+0

당신은 [getPerspectiveTransform] (http://docs.opencv.org/2.4.0/modules/imgproc/doc/geometric_transformations.html?Mat%20getPerspectiveTransform (const % 20Point2f * % 20src, % 20const % 20Point2f * % 20dst) #getperspectivetransform)에 실제로 크기가 4 배인 고정 소수점 인'dst' 인수 – slawekwin

답변

0

가 상기 재 맵핑 함수를 사용하여 시도. 이미지의 각 점에 대해 새 x 및 y 위치를 설정할 수 있어야하며 모든 보간을 처리해야합니다.