aihot  2017-05-26 21:45:51  OpenCV |   查看评论   

2、双线性:由相邻的四像素(2*2)计算得出,公式,

OpenCV中resize函数五种插值算法的实现过程

  1. uchar* dataDst = matDst1.data;  
  2. int stepDst = matDst1.step;  
  3. uchar* dataSrc = matSrc.data;  
  4. int stepSrc = matSrc.step;  
  5. int iWidthSrc = matSrc.cols;  
  6. int iHiehgtSrc = matSrc.rows;  
  7.   
  8. for (int j = 0; j < matDst1.rows; ++j)  
  9. {  
  10.     float fy = (float)((j + 0.5) * scale_y - 0.5);  
  11.     int sy = cvFloor(fy);  
  12.     fy -= sy;  
  13.     sy = std::min(sy, iHiehgtSrc - 2);  
  14.     sy = std::max(0, sy);  
  15.   
  16.     short cbufy[2];  
  17.     cbufy[0] = cv::saturate_cast<short>((1.f - fy) * 2048);  
  18.     cbufy[1] = 2048 - cbufy[0];  
  19.   
  20.     for (int i = 0; i < matDst1.cols; ++i)  
  21.     {  
  22.         float fx = (float)((i + 0.5) * scale_x - 0.5);  
  23.         int sx = cvFloor(fx);  
  24.         fx -= sx;  
  25.   
  26.         if (sx < 0) {  
  27.             fx = 0, sx = 0;  
  28.         }  
  29.         if (sx >= iWidthSrc - 1) {  
  30.             fx = 0, sx = iWidthSrc - 2;  
  31.         }  
  32.   
  33.         short cbufx[2];  
  34.         cbufx[0] = cv::saturate_cast<short>((1.f - fx) * 2048);  
  35.         cbufx[1] = 2048 - cbufx[0];  
  36.   
  37.         for (int k = 0; k < matSrc.channels(); ++k)  
  38.         {  
  39.             *(dataDst+ j*stepDst + 3*i + k) = (*(dataSrc + sy*stepSrc + 3*sx + k) * cbufx[0] * cbufy[0] +   
  40.                 *(dataSrc + (sy+1)*stepSrc + 3*sx + k) * cbufx[0] * cbufy[1] +   
  41.                 *(dataSrc + sy*stepSrc + 3*(sx+1) + k) * cbufx[1] * cbufy[0] +   
  42.                 *(dataSrc + (sy+1)*stepSrc + 3*(sx+1) + k) * cbufx[1] * cbufy[1]) >> 22;  
  43.         }  
  44.     }  
  45. }  
  46. cv::imwrite("linear_1.jpg", matDst1);  
  47.   
  48. cv::resize(matSrc, matDst2, matDst1.size(), 0, 0, 1);  
  49. cv::imwrite("linear_2.jpg", matDst2);  

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV中resize函数五种插值算法的实现过程

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]