이미지를 가로/세로 늘이기를 원하지만 각 픽셀 행은 행 또는 행 번호의 위치에 따라 다른 크기가 필요합니까?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 :
ResultImage : this tutorial에서 설명한 바와 같이
[warpPerspective] (http://docs.opencv.org/2.4.0/modules/imgproc/doc/geometric_transformations.html#warpperspective) – slawekwin
감사합니다. 본 적이 있지만 모릅니다. 3x3 변형 행렬을 준비 할 수 있습니까? 왜냐하면 제 경우에는 각 행에 적용해야하는 눈금의 양을 알고 있기 때문에 이미지의 모든 행마다 다릅니다. ? 그러한 변환을 준비하는 데 필요한 아이디어와 어떤 행 번호에 적용 할 스케일을 알려주는 방법? –
당신은 [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