双三次插值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;
}

双三次插值C代码(利用opencv)的更多相关文章

  1. 利用OpenCV给图像添加中文标注

    利用OpenCV给图像添加中文标注 : 参考:http://blog.sina.com.cn/s/blog_6bbd2dd101012dbh.html  和https://blog.csdn.net/ ...

  2. 图像滑动窗口 利用opencv和matlab

    1.利用opencv实现图像滑动窗口操作 功能:利用opencv实现图像滑动窗口操作(即利用已知尺寸的窗口遍历整幅图像,形成许多子图像)  vs2015+opencv3.1  2016.10 函数实现 ...

  3. C# 利用 OpenCV 进行视频捕获 (笔记)

    原文:C# 利用 OpenCV 进行视频捕获 (笔记) 简介 这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的. 这将有助于那些喜欢C#和Op ...

  4. 如何利用OpenCV自带的级联分类器训练程序训练分类器

    介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...

  5. 纯代码利用CSS3 圆角边框和盒子阴影 制作 iphone 手机效果

    原文:纯代码利用CSS3 圆角边框和盒子阴影 制作 iphone 手机效果 大家好,我是小强老师. 今天我们看下CSS3最为简单的两个属性. css3给我们带来了很多视觉的感受和变化,以前的图片做的事 ...

  6. #利用openCV裁脸

    #利用openCV裁脸import cv2 def draw_rects(img, rects): for x, y, w, h in rects: cv2.rectangle(img, (x, y) ...

  7. 利用opencv作透明重叠人群密度热度图

    在作热度图的时候我们经常需要将热度图调整透明度后叠加在原图上达到更好的展示效果.比如检测人气密度的热度图: (来自sensetime) 一般作图的时候会第一时间想到matplotlib,因为可以很方便 ...

  8. python利用opencv去除水印方法

    OpenCV(Open Source Computer Vision Library)是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法 在python中可以利用opencv来去除 ...

  9. 利用opencv源代码和vs编程序训练分类器haartraining.cpp

    如需转载请注明本博网址:http://blog.csdn.net/ding977921830/article/details/47733363. 一  训练框架 训练人脸检測分类器须要三个步骤: (1 ...

随机推荐

  1. luogu P2093 [国家集训队]JZPFAR

    传送门 要维护平面上点的信息,所以可以用KD-tree来维护,然后维护一个大小为\(k\)的堆,每次从根开始遍历,遇到一个点就看能不能作为前\(k\)远的点,也就是看能不能把堆中最近的点给替换掉.如果 ...

  2. redis远程连接配置

    解决redis远程连接不上的问题 redis现在的版本开启redis-server后,redis-cli只能访问到127.0.0.1,因为在配置文件中固定了ip,因此需要修改redis.conf(有的 ...

  3. 对应关系,以及Module作用

    register 8101---10086 gateway 8201---10010 item-service 8301---8081 manage-web 4901---9001 npm start ...

  4. 生产服务器上安装Python

    2018-05-17 生产环境的服务器(以下简称内网服务器)由于安全限制,可能无法连接外网.这种情况下将无法直接使用pip命令安装python的包 一.更改pip源 - 默认pip是使用Python官 ...

  5. 【ESXI6.0】 ESXI6.0安装时无法安装网卡驱动的解决方法及将网卡驱动加载进ISO

    http://blog.163.com/xifanliang@yeah/blog/static/115078488201571584321787/ 若安装时提示如下图所示 之后安装无法完成,会提示没有 ...

  6. JS基础知识二

    JS控制语句 switch 语句用于基于不同的条件来执行不同的动作 <script> function myFunction(){ var x; var d=new Date().getD ...

  7. Java学习03-进制学习

    计算机中是以二进制来进行数据传递的,二进制分为二进制.八进制.十进制.十六进制 而他们之间如何进行转换呢,二进制作为元,其他进制都是经二进制进行换算的,所以无论什么进制之间的转换都是先转换为二进制,再 ...

  8. git 分支 版本回退

    本地回退: git reset --hard HEAD~ 回退后推送到远程: git push --force .

  9. 【HDU2089】不要62

    题目大意:求区间 [n,m] 中数位不包含 4 和 62 的数字的个数. 题解:数位dp. 预处理出 \(f[i][j]\) 表示 i 位数字中以 j 为第一位的满足条件的数字个数. 对于统计答案来说 ...

  10. SSM三大框架详细整合流程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...