基于opencv的双线性插值的实现(一)
2019独角兽企业重金招聘Python工程师标准>>>
#include <cv.h>
#include <highgui.h>#include <iostream>using namespace std;float Abs(float f);
void zoom(IplImage* src, IplImage* dst);int main() {// read an imageIplImage* src = cvLoadImage("E://pic//view.jpg");IplImage* dst = cvCreateImage(cvSize(1000,1000), src->depth, src->nChannels);zoom(src, dst);cvShowImage("src", src);cvShowImage("dst", dst);cvWaitKey(0);return 1;
}
/****************************
*返回绝对值
*****************************/
float Abs(float f)
{return f>=0 ? f : -f;
}
/****************************
*目标: 实现图像的缩放,使用了双线性插值的算法*参数: src源图像dst生成图像*返回值:无
*****************************/
void zoom(IplImage* src, IplImage* dst)
{int srcWidth = src->width;int srcHeight = src->height;int dstWidth = dst->width;int dstHeight = dst->height;//源图像与目标图像的宽高比例,这里减1很重要,否则有时报错,有时不报错。这点困扰了我很久const float tx = (srcWidth-1.0f)/(dstWidth-1.0f);const float ty = (srcHeight-1.0f)/(dstHeight-1.0f);CvPoint2D32f uv;//存储源图像的浮点坐标CvPoint3D32f f1;CvPoint3D32f f2;for (int j=0; j<dstHeight-1; j++){for (int i=0; i<dstWidth-1; i++){uv.x = i*tx;uv.y = j*ty;int iu = (int)uv.x;int iv = (int)uv.y;f1.x = ((uchar*)(src->imageData + src->widthStep*iv))[iu*3+0] * (1-Abs(uv.x-iu))+((uchar*)(src->imageData + src->widthStep*iv))[(iu+1)*3+0] * (uv.x-iu);f1.y = ((uchar*)(src->imageData + src->widthStep*iv))[iu*3+1] * (1-Abs(uv.x-iu))+((uchar*)(src->imageData + src->widthStep*iv))[(iu+1)*3+1] * (uv.x-iu);f1.z = ((uchar*)(src->imageData + src->widthStep*iv))[iu*3+2] * (1-Abs(uv.x-iu))+((uchar*)(src->imageData + src->widthStep*iv))[(iu+1)*3+2] * (uv.x-iu);f2.x = ((uchar*)(src->imageData + src->widthStep*(iv+1)))[iu*3] * (1-Abs(uv.x-iu))+((uchar*)(src->imageData + src->widthStep*(iv+1)))[(iu+1)*3] * (uv.x-iu);f2.y = ((uchar*)(src->imageData + src->widthStep*(iv+1)))[iu*3+1] * (1-Abs(uv.x-iu))+((uchar*)(src->imageData + src->widthStep*(iv+1)))[(iu+1)*3+1] * (uv.x-iu);f2.z = ((uchar*)(src->imageData + src->widthStep*(iv+1)))[iu*3+2] * (1-Abs(uv.x-iu))+((uchar*)(src->imageData + src->widthStep*(iv+1)))[(iu+1)*3+2] * (uv.x-iu);((uchar*)(dst->imageData + dst->widthStep*j))[i*3] = f1.x*(1-Abs(uv.y-iv))+f2.x*(Abs(uv.y-iv));((uchar*)(dst->imageData + dst->widthStep*j))[i*3+1] = f1.y*(1-Abs(uv.y-iv))+f2.y*(Abs(uv.y-iv));((uchar*)(dst->imageData + dst->widthStep*j))[i*3+2] = f1.z*(1-Abs(uv.y-iv))+f2.z*(Abs(uv.y-iv));}//这里添加上最后一列((uchar*)(dst->imageData + dst->widthStep*j))[(dstWidth-1)*3] = ((uchar*)(dst->imageData + dst->widthStep*j))[(dstWidth-2)*3];((uchar*)(dst->imageData + dst->widthStep*j))[(dstWidth-1)*3+1] = ((uchar*)(dst->imageData + dst->widthStep*j))[(dstWidth-2)*3+1];((uchar*)(dst->imageData + dst->widthStep*j))[(dstWidth-1)*3+2] = ((uchar*)(dst->imageData + dst->widthStep*j))[(dstWidth-2)*3+2];}//这里添加上最后一行for(int i=0; i<dstWidth*3; i++){((uchar*)(dst->imageData + dst->widthStep*(dstHeight-1)))[i] = ((uchar*)(dst->imageData + dst->widthStep*(dstHeight-2)))[i];}
}
效果图:
转载于:https://my.oschina.net/u/923087/blog/279098
基于opencv的双线性插值的实现(一)相关推荐
- 语义分割:基于openCV和深度学习(二)
语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...
- 语义分割:基于openCV和深度学习(一)
语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...
- 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测
第7章 图像变换 7.1 基于OpenCV的边缘检测 7.1.1 边缘检测的一般步骤 1.滤波:边缘检测算法主要基于图像强度的一阶和二阶导数,导数对噪声敏感,所以要滤波 2.增强:确定图像各点邻域强度 ...
- 基于OpenCV的图像梯度与边缘检测!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学 严格的说,梯度计 ...
- 基于OpenCV的图像分割处理!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学 图像阈值化分割是 ...
- 基于Opencv实现眼睛控制鼠标
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如何用眼睛来控制鼠标?一种基于单一前向视角的机器学习眼睛姿态估计方 ...
- 基于OpenCV的数字识别系统
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 综述 2012年iOS应用商店中发布了一个名为FuelMate的G ...
- 基于OpenCV的表格文本内容提取
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小伙伴们可能会觉得从图像中提取文本是一件很麻烦的事情,尤其是需要提 ...
- 基于OpenCV 的车牌识别
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 车牌识别是一种图像处理技术,用于识别不同车辆.这项技术被广泛用于各 ...
最新文章
- Oracle CRS的管理与维护
- Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
- 2014年acm亚洲区域赛·鞍山站
- 要来吗,不错的WPF技术交流群!(大批干货今日自取)
- 10 个理由让你继续干 IT
- Jenkins的配置及使用
- 安卓自动滑屏脚本_【按键精灵】开发抖音全自动养号脚本!可实现自动滑屏
- Python进阶(零)字典、缺省参数、多值参数
- 8.Linux性能诊断 --- 浅谈基于数据分析的网络态势感知
- 2021美亚团队赛复盘
- 在线Cron在线表达式生成器工具推荐【磁钉cron生成器】
- PDF文件太大,教你一个方法让PDF文件变小
- 双专线接入H3C防火墙无法远程到设备
- 高数 | 【定积分、变限积分】【一元函数积分学李林880】 及 巧解例题
- XSS过滤绕过总结_xss绕过字符过滤
- 细胞工程-6-原生质体分离核体细胞杂交
- 如何在Kindle上阅读漫画书和漫画
- 10年回顾:世界各地开发高手谈Java
- c语言long型是什么,c语言long类型是什么意思
- 想拿高工资?Java面试资料集合,附赠课程+题库
热门文章
- AI芯片初创公司单纯卖芯片还是捆绑算法的商业模式更好?
- 作业要求 20181127-1 附加作业 软件工程原则的应用实例分析
- 【381天】我爱刷题系列140(2018.02.21)
- 英特尔变身数据公司 未来最大数据市场定是中国
- SQL Server中CROSS APPLY和OUTER APPLY的应用详解
- [转载]逐步建设企业DevOps能力
- 第十章 基本数据结构——栈和队列
- SQLSERVER model数据库
- 【邮箱使用】Yahoo邮箱POP3、SMTP开通以及设置方法
- .Net 2.0 新功能:迭代器(Iterators)