双三次插值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. 如何把maven文件pom.xml中的java包下载下来

    右击pom.xml文件,选择Run As-->Maven build- 在打开的页面中,如图输入"dependency:copy-dependencies",后点击" ...

  2. Celery多队列配置

    Celery多队列配置 Celery官方文档 项目结构 /proj -__init__ -app.py #实例化celery对象 -celeryconfig.py #celery的配置文件 -task ...

  3. css3 加载动画

    代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  4. 破解phpStorm 2018 亲测

    网上教程很多,这里我就不多赘述,我也是看其他教程试过来的. 下面分步骤介绍一下: 1.下载,我这里选用的版本是 phpStorm 2018.3 ,下载地址 https://www.newasp.net ...

  5. 2019-11-29-VisualStudio-解决方案筛选器-slnf-文件

    title author date CreateTime categories VisualStudio 解决方案筛选器 slnf 文件 lindexi 2019-11-29 08:41:13 +08 ...

  6. Centos7安装RocketMQ4.4

    网上的教程坑贼鸡儿多 一.安装maven RocketMQ依赖maven打包,所以先要在虚拟机中安装maven,我使用的是v3.3.9. 1:进入指定目录下载maven 包 cd /usr/local ...

  7. 002-Saltstack自动化操作记录(2)-配置使用

    之前梳理了就是第一篇001,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制端机器上做好主机名映射关系 1 ...

  8. 为什么 Android 开发者都应该尝试一下 Anko?

    简评: 这里介绍的仅仅是 Anko 中很小的一部分,Kotlin + Anko 真的让 Android 开发简化了不少,用了 Anko 基本就可以告别那些什么 Android 不得不知的代码收集贴了. ...

  9. 怎样减少 Android 应用包 60% 的大小?

    简评: 应用的大小也是用户体验的一个重要方面,而减少 Android 应用安装包大小其实一点也不复杂. 对于移动应用来说,应用安装包的大小当然是越小越好.特别是对于一些欠发达地区,你不希望用户因为手机 ...

  10. strcmp-sse2-unaligned.S: No such file or directory.

    __strcmp_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:3131 ../sysdeps/x8 ...