双三次插值C代码(利用opencv)

phasecubic2.cpp

D:\文件及下载相关\文档\Visual Studio 2010\Projects\phasecubic2\phasecubic2

// phasecubic2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <string>
using namespace cv;
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
cv::Mat matSrc, matDst1, matDst2;
matSrc = cv::imread("003.png", | );
matDst1 = cv::Mat(cv::Size(, ), matSrc.type(), cv::Scalar::all());
matDst2 = cv::Mat(matDst1.size(), matSrc.type(), cv::Scalar::all()); double scale_x = (double)matSrc.cols / matDst1.cols;
double scale_y = (double)matSrc.rows / matDst1.rows;
int iscale_x = cv::saturate_cast<int>(scale_x);
int iscale_y = cv::saturate_cast<int>(scale_y); for (int j = ; j < matDst1.rows; ++j)
{
float fy = (float)((j + 0.5) * scale_y - 0.5);
int sy = cvFloor(fy);
fy -= sy;
sy = std::min(sy, matSrc.rows - );
sy = std::max(, sy); const float A = -0.75f; float coeffsY[];
coeffsY[] = ((A*(fy + ) - *A)*(fy + ) + *A)*(fy + ) - *A;
coeffsY[] = ((A + )*fy - (A + ))*fy*fy + ;
coeffsY[] = ((A + )*( - fy) - (A + ))*( - fy)*( - fy) + ;
coeffsY[] = .f - coeffsY[] - coeffsY[] - coeffsY[]; short cbufY[];
cbufY[] = cv::saturate_cast<short>(coeffsY[] * );
cbufY[] = cv::saturate_cast<short>(coeffsY[] * );
cbufY[] = cv::saturate_cast<short>(coeffsY[] * );
cbufY[] = cv::saturate_cast<short>(coeffsY[] * ); for (int i = ; i < matDst1.cols; ++i)
{
float fx = (float)((i + 0.5) * scale_x - 0.5);
int sx = cvFloor(fx);
fx -= sx; if (sx < ) {
fx = , sx = ;
}
if (sx >= matSrc.cols - ) {
fx = , sx = matSrc.cols - ;
} float coeffsX[];
coeffsX[] = ((A*(fx + ) - *A)*(fx + ) + *A)*(fx + ) - *A;
coeffsX[] = ((A + )*fx - (A + ))*fx*fx + ;
coeffsX[] = ((A + )*( - fx) - (A + ))*( - fx)*( - fx) + ;
coeffsX[] = .f - coeffsX[] - coeffsX[] - coeffsX[]; short cbufX[];
cbufX[] = cv::saturate_cast<short>(coeffsX[] * );
cbufX[] = cv::saturate_cast<short>(coeffsX[] * );
cbufX[] = cv::saturate_cast<short>(coeffsX[] * );
cbufX[] = cv::saturate_cast<short>(coeffsX[] * ); for (int k = ; k < matSrc.channels(); ++k)
{
matDst1.at<cv::Vec3b>(j, i)[k] =
abs(
(matSrc.at<cv::Vec3b>(sy-, sx-)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy, sx-)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy+, sx-)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy+, sx-)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy-, sx)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy, sx)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy+, sx)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy+, sx)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy-, sx+)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy, sx+)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy+, sx+)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy+, sx+)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy-, sx+)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy, sx+)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy+, sx+)[k] * cbufX[] * cbufY[]
+ matSrc.at<cv::Vec3b>(sy+, sx+)[k] * cbufX[] * cbufY[]
) >> );
}
}
}
//cv::imwrite("cubic_1.jpg", matDst1);
//cv::imwrite("cubic_2.jpg", matDst2);
const char SrcWinNa[] = "SrcWindow";
const char ResWinNa[] = "ResWindow";
cvNamedWindow(SrcWinNa, CV_WINDOW_AUTOSIZE);
imshow(SrcWinNa, matDst1);
cv::resize(matSrc, matDst2, matDst1.size(), , , );
cvNamedWindow(ResWinNa, CV_WINDOW_AUTOSIZE);
imshow(ResWinNa, matDst2);
cvWaitKey();
return ;
//getchar();
//return 0;
}

最新文章

  1. [codevs1743]反转卡片
  2. 使用Packet Sniffer抓包和分析(z-stack协议)
  3. (翻译)《Hands-on Node.js》—— Why?
  4. vue.js慢速入门(1)
  5. android [因为开了刷机精灵等软件 导致adb 无法使用]error: could not install *smartsocket* listener: cannot bind
  6. HTTP协议学习---(十二)理解转发与重定向
  7. Python内置函数解析
  8. Subversion 1.8.1编译安装(self)
  9. 行为树(Behavior Tree)实践(1)– 基本概念
  10. HBase伪分布安装
  11. Cygwin在线安装指南
  12. SpringBoot运行原理
  13. hdu5904 LCIS
  14. 微信小程序自定义组件实现
  15. tiny4412--linux驱动学习(1)
  16. Javascript 高级程序设计--总结【三】
  17. C#设计模式之8:外观模式
  18. Mybatis之占位符与拼接符
  19. 09 Zabbix Item类型之Zabbix SNMP类型
  20. GoldenGate实时投递数据到大数据平台(1)-MongoDB

热门文章

  1. vim最常用命令
  2. Python基础——函数进阶
  3. Spring-data-jpa n+1问题
  4. 用户吐槽不断:Android 10.0没法用
  5. Interviewe HDU - 3486 (ST表+枚举 )(非二分,看下这个数据、)
  6. source insight支持查看makefile、kconfig以及.s代码方法
  7. Python之网路编程之socket简单介绍
  8. apk反编译(仅供娱乐)
  9. 【NOIP2016普及组复赛】魔法阵
  10. 解决“Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id &#39;org.springframework.boot&#39; not found.”