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的双线性插值的实现(一)相关推荐

  1. 语义分割:基于openCV和深度学习(二)

    语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...

  2. 语义分割:基于openCV和深度学习(一)

    语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...

  3. 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测

    第7章 图像变换 7.1 基于OpenCV的边缘检测 7.1.1 边缘检测的一般步骤 1.滤波:边缘检测算法主要基于图像强度的一阶和二阶导数,导数对噪声敏感,所以要滤波 2.增强:确定图像各点邻域强度 ...

  4. 基于OpenCV的图像梯度与边缘检测!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学 严格的说,梯度计 ...

  5. 基于OpenCV的图像分割处理!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学 图像阈值化分割是 ...

  6. 基于Opencv实现眼睛控制鼠标

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如何用眼睛来控制鼠标?一种基于单一前向视角的机器学习眼睛姿态估计方 ...

  7. 基于OpenCV的数字识别系统

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 综述 2012年iOS应用商店中发布了一个名为FuelMate的G ...

  8. 基于OpenCV的表格文本内容提取

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小伙伴们可能会觉得从图像中提取文本是一件很麻烦的事情,尤其是需要提 ...

  9. 基于OpenCV 的车牌识别

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 车牌识别是一种图像处理技术,用于识别不同车辆.这项技术被广泛用于各 ...

最新文章

  1. Oracle CRS的管理与维护
  2. Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
  3. 2014年acm亚洲区域赛·鞍山站
  4. 要来吗,不错的WPF技术交流群!(大批干货今日自取)
  5. 10 个理由让你继续干 IT
  6. Jenkins的配置及使用
  7. 安卓自动滑屏脚本_【按键精灵】开发抖音全自动养号脚本!可实现自动滑屏
  8. Python进阶(零)字典、缺省参数、多值参数
  9. 8.Linux性能诊断 --- 浅谈基于数据分析的网络态势感知
  10. 2021美亚团队赛复盘
  11. 在线Cron在线表达式生成器工具推荐【磁钉cron生成器】
  12. PDF文件太大,教你一个方法让PDF文件变小
  13. 双专线接入H3C防火墙无法远程到设备
  14. 高数 | 【定积分、变限积分】【一元函数积分学李林880】 及 巧解例题
  15. XSS过滤绕过总结_xss绕过字符过滤
  16. 细胞工程-6-原生质体分离核体细胞杂交
  17. 如何在Kindle上阅读漫画书和漫画
  18. 10年回顾:世界各地开发高手谈Java
  19. c语言long型是什么,c语言long类型是什么意思
  20. 想拿高工资?Java面试资料集合,附赠课程+题库

热门文章

  1. AI芯片初创公司单纯卖芯片还是捆绑算法的商业模式更好?
  2. 作业要求 20181127-1 附加作业 软件工程原则的应用实例分析
  3. 【381天】我爱刷题系列140(2018.02.21)
  4. 英特尔变身数据公司 未来最大数据市场定是中国
  5. SQL Server中CROSS APPLY和OUTER APPLY的应用详解
  6. [转载]逐步建设企业DevOps能力
  7. 第十章 基本数据结构——栈和队列
  8. SQLSERVER model数据库
  9. 【邮箱使用】Yahoo邮箱POP3、SMTP开通以及设置方法
  10. .Net 2.0 新功能:迭代器(Iterators)