将opencv库中的cv2.resize函数源码写出来
时间: 2023-07-19 17:45:55 浏览: 180
cv2.resize函数的源码实际上是由C++实现的,以下是部分cv2.resize函数的C++源码:
```c++
cv::Mat cv::resize(cv::InputArray src, cv::OutputArray dst, cv::Size dsize, double fx, double fy,
int interpolation)
{
CV_INSTRUMENT_REGION()
if (dsize.area() == 0)
CV_Error(cv::Error::StsBadSize, "Resized dimension cannot be zero");
if (src.empty())
return cv::Mat();
if (fx == 0 && fy == 0)
return src.getMat();
if (fx == 0)
fx = static_cast<double>(dsize.width) / src.size().width;
if (fy == 0)
fy = static_cast<double>(dsize.height) / src.size().height;
cv::Mat srcMat = src.getMat();
dst.create(cv::Size(cvRound(srcMat.cols * fx), cvRound(srcMat.rows * fy)), srcMat.type());
if (interpolation == cv::INTER_NEAREST || interpolation == cv::INTER_LINEAR ||
interpolation == cv::INTER_CUBIC || interpolation == cv::INTER_AREA ||
interpolation == cv::INTER_LANCZOS4)
{
cv::resize(srcMat, dst, dst.size(), fx, fy, interpolation);
}
else
{
cv::Size sz(cvRound(srcMat.cols * fx), cvRound(srcMat.rows * fy));
cv::Mat temp;
cv::resize(srcMat, temp, sz, 0, 0, cv::INTER_LINEAR);
cv::resize(temp, dst, dst.size(), 0, 0, interpolation);
}
return dst.getMat();
}
```
这里的cv2.resize函数主要是根据传入的参数,调用cv::resize函数实现图像的缩放,其中fx和fy是缩放因子,dsize是缩放后的图像大小,interpolation参数则表示缩放时采用的插值方法。
阅读全文