双三次插值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 ...
随机推荐
- thinkphp 静态缓存设置
'HTML_CACHE_RULES'=> array('ActionName' => array('静态规则', '静态缓存有效期', '附加规则'),'ModuleName(小写)' = ...
- 清除windows 远程桌面访问记录 批处理
直接上码供参考 @echo OFF color 0a Title Clear Windows Recent Mode con cols=109 lines=30 :START ECHO. Echo = ...
- Nginx Location规则
Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令 ...
- IO模型对比:同步、异步、阻塞、非阻塞
最近工作接触到了网络服务同步和异步,所以学习了下<UNIX网络编程>,在此作下总结. 一.I/O模型 输入/输出(I/O)是在主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程. ...
- 折半搜索+Hash表+状态压缩 | [Usaco2012 Open]Balanced Cow Subsets | BZOJ 2679 | Luogu SP11469
题面:SP11469 SUBSET - Balanced Cow Subsets 题解: 对于任意一个数,它要么属于集合A,要么属于集合B,要么不选它.对应以上三种情况设置三个系数1.-1.0,于是将 ...
- Elasticsearch:hanlp 中文分词器
HanLP 中文分词器是一个开源的分词器,是专为Elasticsearch而设计的.它是基于HanLP,并提供了HanLP中大部分的分词方式.它的源码位于: https://github.com/Ke ...
- 通过shell监控网页是否正常,然后促发邮件告警
最近在网上找了下通过shell编写一个脚本来监控网页是否正常,如果不正常则促发邮件告警,修复后有一个修复的通知邮件:但一直没有找到全面的,所以自己研究了下,写了一个linux对接邮箱和通过shell写 ...
- SpringMVC的工作原理及MVC设计模式
SpringMVC的工作原理: 1.当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request).这个请求会携带用户请求的信息,离开浏览器. 2.这个请求会首先到达Sprin ...
- 负载均衡(四)Nginx负载均衡策略
一.Nginx的作用 1.反向代理 代理:转发请求的服务器,分代理和反向代理.代理一般指的是我们使用的DNS,反向代理是放在服务端的大家通常用Nginx来解决.实际应用中,由于服务端处于一个中心位置, ...
- iOS弹窗UIAlertAction用法
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"确认" message:@&quo ...