双三次插值C代码(利用opencv)
双三次插值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)的更多相关文章
- 利用OpenCV给图像添加中文标注
利用OpenCV给图像添加中文标注 : 参考:http://blog.sina.com.cn/s/blog_6bbd2dd101012dbh.html 和https://blog.csdn.net/ ...
- 图像滑动窗口 利用opencv和matlab
1.利用opencv实现图像滑动窗口操作 功能:利用opencv实现图像滑动窗口操作(即利用已知尺寸的窗口遍历整幅图像,形成许多子图像) vs2015+opencv3.1 2016.10 函数实现 ...
- C# 利用 OpenCV 进行视频捕获 (笔记)
原文:C# 利用 OpenCV 进行视频捕获 (笔记) 简介 这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的. 这将有助于那些喜欢C#和Op ...
- 如何利用OpenCV自带的级联分类器训练程序训练分类器
介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...
- 纯代码利用CSS3 圆角边框和盒子阴影 制作 iphone 手机效果
原文:纯代码利用CSS3 圆角边框和盒子阴影 制作 iphone 手机效果 大家好,我是小强老师. 今天我们看下CSS3最为简单的两个属性. css3给我们带来了很多视觉的感受和变化,以前的图片做的事 ...
- #利用openCV裁脸
#利用openCV裁脸import cv2 def draw_rects(img, rects): for x, y, w, h in rects: cv2.rectangle(img, (x, y) ...
- 利用opencv作透明重叠人群密度热度图
在作热度图的时候我们经常需要将热度图调整透明度后叠加在原图上达到更好的展示效果.比如检测人气密度的热度图: (来自sensetime) 一般作图的时候会第一时间想到matplotlib,因为可以很方便 ...
- python利用opencv去除水印方法
OpenCV(Open Source Computer Vision Library)是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法 在python中可以利用opencv来去除 ...
- 利用opencv源代码和vs编程序训练分类器haartraining.cpp
如需转载请注明本博网址:http://blog.csdn.net/ding977921830/article/details/47733363. 一 训练框架 训练人脸检測分类器须要三个步骤: (1 ...
随机推荐
- 雪花算法生成ID
前言我们的数据库在设计时一般有两个ID,自增的id为主键,还有一个业务ID使用UUID生成.自增id在需要分表的情况下做为业务主键不太理想,所以我们增加了uuid作为业务ID,有了业务id仍然还存在自 ...
- Scrapy-redis分布式+Scrapy-redis实战
[学习目标] Scrapy-redis分布式的运行流程 Scheduler与Scrapy自带的Scheduler有什么区别 Duplication Filter作用 源码自带三种spider的使用 6 ...
- winmm.dll包含函数
DLL 文件: winmm 或者 winmm.dll DLL 名称: Windows Multimedia API 描述: winmm.dll是Windows多媒体相关应用程序接口,用于低档的音频和游 ...
- 字典树——动态&&静态
静态---时间快 /************************************************************************* > File Name: ...
- Lock的await/singal 和 Object的wait/notify 的区别(转载)
在使用Lock之前,我们都使用Object 的wait和notify实现同步的.举例来说,一个producer和consumer,consumer发现没有东西了,等待,producer生成东西了,唤醒 ...
- spring事务配置,声明式事务管理和基于@Transactional注解的使用(转载)
原文地址:http://blog.csdn.net/bao19901210/article/details/41724355 事务管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的 ...
- 判断request中是否有文件
ServletFileUpload.isMultipartContent(request)
- npm 全局安装和局部安装的区别
上图是从网上找的webpack 安装的步骤,我们看到除了要全局安装之外,还需要本地安装,那么这两者有什么区别呢? 本文以Windows平台上做测试,以webpack为示例做教程 什么是全局安装? 安装 ...
- UNIX标准C - socket套接字
一.计算机网络 1.计算机网络的功能 a.数据通信 b.资源共享 c.提高系统的可靠性 d.分布式网络处理和负载均匀. 2.计算机网络的组成 1.通信子网:由网卡.线缆.集线器.中继器.交换器.路由器 ...
- Codeforces Gym 100851 K King's Inspection ( 哈密顿回路 && 模拟 )
题目链接 题意 : 给出 N 个点(最多 1e6 )和 M 条边 (最多 N + 20 条 )要你输出一条从 1 开始回到 1 的哈密顿回路路径,不存在则输出 " There is no r ...