当前位置: 首页 > 编程日记 > 正文

双线性插值实现

#include <opencv2/imgproc/imgproc.hpp>  
#include <opencv2/core/core.hpp>        
#include <opencv2/highgui/highgui.hpp> 
#include <iostream> 
// 实现双线性插值图像缩放
cv::Mat BilinearInterpolation(cv::Mat srcImage)
{CV_Assert(srcImage.data != NULL);int srcRows = srcImage.rows;int srcCols = srcImage.cols;int srcStep = srcImage.step;// 构建目标图像cv::Mat dstImage = cv::Mat(cv::Size(640, 480), srcImage.type(),cv::Scalar::all(0));int dstRows = dstImage.rows;int dstCols = dstImage.cols;int dstStep = dstImage.step;// 数据定义及转换IplImage src = srcImage;IplImage dst = dstImage;std::cout << "srcCols:" << srcCols << " srcRows:" <<srcRows << "srcStep:" << srcStep << std::endl;std::cout << "dstCols:" << dstCols << " dstRows:" <<dstRows << "dstStep:" << dstStep << std::endl;// 坐标定义float srcX = 0, srcY = 0;float t1X = 0, t1Y = 0, t1Z = 0;float t2X = 0, t2Y = 0, t2Z = 0;for (int j = 0; j < dstRows - 1; j++){for (int i = 0; i < dstCols - 1; i++){// 缩放映射关系 srcX = (i + 0.5)*((float)srcCols) / (dstCols)-0.5;srcY = (j + 0.5)*((float)srcRows) / (dstRows)-0.5;int iSrcX = (int)srcX;int iSrcY = (int)srcY;// 三通道求邻域加权值1t1X = ((uchar*)(src.imageData + srcStep*iSrcY))[iSrcX * 3 + 0] * (1 - std::abs(srcX - iSrcX)) +((uchar*)(src.imageData + srcStep*iSrcY))[(iSrcX + 1) * 3 + 0] * (srcX - iSrcX);t1Y = ((uchar*)(src.imageData + srcStep*iSrcY))[iSrcX * 3 + 1] * (1 - std::abs(srcX - iSrcX)) +((uchar*)(src.imageData + srcStep*iSrcY))[(iSrcX + 1) * 3 + 1] * (srcX - iSrcX);t1Z = ((uchar*)(src.imageData + srcStep*iSrcY))[iSrcX * 3 + 2] * (1 - std::abs(srcX - iSrcX)) +((uchar*)(src.imageData + srcStep*iSrcY))[(iSrcX + 1) * 3 + 2] * (srcX - iSrcX);// 三通道求邻域加权值2t2X = ((uchar*)(src.imageData + srcStep*(iSrcY + 1)))[iSrcX * 3] * (1 - std::abs(srcX - iSrcX))+ ((uchar*)(src.imageData + srcStep*(iSrcY + 1)))[(iSrcX + 1) * 3] * (srcX - iSrcX);t2Y = ((uchar*)(src.imageData + srcStep*(iSrcY + 1)))[iSrcX * 3 + 1] * (1 - std::abs(srcX - iSrcX))+ ((uchar*)(src.imageData + srcStep*(iSrcY + 1)))[(iSrcX + 1) * 3 + 1] * (srcX - iSrcX);t2Z = ((uchar*)(src.imageData + srcStep*(iSrcY + 1)))[iSrcX * 3 + 2] * (1 - std::abs(srcX - iSrcX))+ ((uchar*)(src.imageData + srcStep*(iSrcY + 1)))[(iSrcX + 1) * 3 + 2] * (srcX - iSrcX);// 根据公式求解目标图像加权((uchar*)(dst.imageData + dstStep*j))[i * 3] =t1X*(1 - std::abs(srcY - iSrcY)) + t2X*(std::abs(srcY - iSrcY));((uchar*)(dst.imageData + dstStep*j))[i * 3 + 1] =t1Y*(1 - std::abs(srcY - iSrcY)) + t2Y*(std::abs(srcY - iSrcY));((uchar*)(dst.imageData + dstStep*j))[i * 3 + 2] =t1Z*(1 - std::abs(srcY - iSrcY)) + t2Z*(std::abs(srcY - iSrcY));}// 列操作((uchar*)(dst.imageData + dstStep*j))[(dstCols - 1) * 3] =((uchar*)(dst.imageData + dstStep*j))[(dstCols - 2) * 3];((uchar*)(dst.imageData + dstStep*j))[(dstCols - 1) * 3 +1] = ((uchar*)(dst.imageData + dstStep*j))[(dstCols - 2) * 3 + 1];((uchar*)(dst.imageData + dstStep*j))[(dstCols - 1) * 3+ 2] = ((uchar*)(dst.imageData + dstStep*j))[(dstCols - 2) * 3 + 2];}// 行操作for (int i = 0; i < dstCols * 3; i++){((uchar*)(dst.imageData + dstStep*(dstRows - 1)))[i] =((uchar*)(dst.imageData + dstStep*(dstRows - 2)))[i];}return  dstImage;
}
int main()
{cv::Mat srcImage = cv::imread("..\\images\\flower3.jpg");if (!srcImage.data)return -1;cv::Mat dstImage = BilinearInterpolation(srcImage);cv::imshow("srcImage", srcImage);cv::imshow("dstImage", dstImage);cv::waitKey(0);return 0;
}

转载:http://blog.csdn.net/zhuwei1988


相关文章:

【C++】C++ 强制转换运算符

C 运算符 强制转换运算符是一种特殊的运算符&#xff0c;它把一种数据类型转换为另一种数据类型。强制转换运算符是一元运算符&#xff0c;它的优先级与其他一元运算符相同。 大多数的 C 编译器都支持大部分通用的强制转换运算符&#xff1a; (type) expression 其中&…

WPS 2019 更新版(8392)发布,搭配优麒麟 19.04 运行更奇妙!

WPS 2019 支持全新的外观界面、目录更新、方框打勾、智能填充、内置浏览器、窗口拆组、个人中心等功能。特别是全新的新建页面&#xff0c;让你可以整合最近打开的文档、本地模版、公文模版、在线模板等。 随着优麒麟即将发布的新版 19.04 的到来&#xff0c;金山办公软件也带来…

图像金字塔操作,上采样、下采样、缩放

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> // 图像金子塔采样操作 void Pyramid(cv::Mat srcImage) {// 根据图像源尺寸判断是否需要缩放if(srcImage.rows > 400 && srcImage…

【C++】【OpenCv】图片加噪声处理,计时,及键盘事件响应捕捉

图像噪声添加 cv::Mat addGuassianNoise(cv::Mat& src, double a, double b) {cv::Mat temp src.clone();cv::Mat dst(src.size(), src.type()); ​// Construct a matrix containing Gaussian noisecv::Mat noise(temp.size(), temp.type());cv::RNG rng(time(NULL));//…

透视学理论(十四)

2019独角兽企业重金招聘Python工程师标准>>> 已知左右距点分别位于透视画面两侧&#xff0c;因此我们可以左距点来得出透视画面的纵深长度。 距点&#xff0c;指的是与透视画面成45的水平线的消失点。我们把画面边缘按1米的宽度&#xff08;A点&#xff09;&#xf…

适用于Mac上的SQL Server

适用于Mac上的SQL Server&#xff1f; 众所周知&#xff0c;很多人都在电脑上安装了SQL Server软件&#xff0c;普通用户直接去官网下载安装即可&#xff0c;Mac用户则该如何在Mac电脑上安装SQL Server呢&#xff1f;想要一款适用于Mac上的SQL Server&#xff1f;点击进入&…

【MATLAB】————拷贝指定文件路径下的有序文件(选择后),可处理固定规律的文件图片数据或者文件

总体上来说这种数据有2中处理思路。第一种如下所示&#xff0c;从一组数据中挑选出符合要求的数据&#xff1b; 第二中就是数据中不需要的数据删除&#xff0c;选择处理不需要的数据&#xff0c;留下的补集就是需要的数库。一般情况下需要看问题是否明确&#xff0c;需求明确的…

mouseover与mouseenter,mouseout与mouseleave的区别

mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素&#xff0c;都会触发 mouseover 事件。只有在鼠标指针穿过被选元素时&#xff0c;才会触发 mouseenter 事件。 mouseout与mouseleave不论鼠标指针离开被选元素还是任何子元素&#xff0c;都会触发 mouseout 事件。只…

图像掩码操作的两种实现

#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <stdio.h> using namespace cv; using namespace std; // 基于像素邻域掩码操作…

控制反转 IOC

2019独角兽企业重金招聘Python工程师标准>>> 控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;面向对象设计原则&#xff0c;降低代码耦合度 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09; 依赖查找&#xf…

【C++】explicit关键字

explicit的优点是可以避免不合时宜的类型变换&#xff0c;缺点无。所以google约定所有单参数的构造函数都必须是显式的** explicit关键字只需用于类内的单参数构造函数前面。由于无参数的构造函数和多参数的构造函数总是显式调用&#xff0c;这种情况在构造函数前加explicit无…

mongodb3 分片集群平滑迁移

分片集群平滑迁移实验(成功)过程概述&#xff1a;为每个分片添加多个从节点&#xff0c;然后自动同步。同步完后&#xff0c;切换主节点到新服务器节点。导出原来的config 数据库&#xff0c;并导入到新服务器的config数据库停掉整个集群&#xff0c;可以使用kill 命令停掉新服…

图像添加椒盐噪声

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <cstdlib> // 图像添加椒盐噪声 cv::Mat addSaltNoise(const cv::Mat srcImage, int n) {cv::Mat resultIamge srcImage.clone() ;for(int k0; k<n; k){// 随机取值行…

我用python10年后,我发现学python必看这三本书!

非常喜欢python 我非常喜欢python&#xff0c;在前面5年里&#xff0c;它一直是我热衷使用并不断研究的语言&#xff0c;迄今为止&#xff0c;python都非常友好并且易于学习&#xff01; 它几乎可以做任何事&#xff0c;从简单的脚本创建、web&#xff0c;到数据可视化以及AI人…

【OpenCV】内核的形状函数使用记录

opencv getStructuringElement函数 为形态操作返回指定大小和形状的结构化元素。 该函数构造并返回结构化元素&#xff0c;这些元素可以进一步传递给侵蚀、扩张或morphologyEx。但是您也可以自己构造一个任意的二进制掩码&#xff0c;并将它用作结构化元素。 getStructuringE…

boxFilter 滤波器实现

cv::Ptr<cv::FilterEngine> cv::createBoxFilter( int srcType, int dstType, Size ksize,Point anchor, bool normalize, int borderType ) {// 基础参数设置 图像深度int sdepth CV_MAT_DEPTH(srcType);int cn CV_MAT_CN(srcType), sumType CV_64F;if( sdepth < …

git代理设置

2019独角兽企业重金招聘Python工程师标准>>> git config --global http.proxy http://127.0.0.1:1080 git config --global https.proxy https://127.0.0.1:1080 git config --global http.sslVerify false删除 git config --global --unset http.proxy git config …

获得PMP证书的这一年

很荣幸&#xff0c;通过2018年12月的PMP考试&#xff0c;这不仅是一张证书的收获&#xff0c;更体现了我的成长&#xff0c;明确了以后的道路。在考证的过程中&#xff0c;我收获了很多&#xff0c;不仅是工作技能方面&#xff0c;还包括思想的升华。  首先&#xff0c;重拾了…

【OpenCV】图片操作小结:RAW图转image以及image连续保存

opencv将RAW图转image uint32_t ReadRawImage(cv::Mat& image,const std::string& path,int width,int height,int cv_image_type) {cv::Mat input_image(height, width, cv_image_type);std::ifstream in(path, std::ios::in | std::ios::binary);if (!in) {std::cou…

Windows server2008服务器设置多用户登录

添加用户 右击我的电脑-->管理-->本地用户和组-->新用户 启用远程服务并添加远程用户 启用 右键我的电脑--->属性--->远程设置--->勾上允许远程连接到此电脑 添加用户 点击选择用户--->添加--->高级--->立即查找 防火墙允许远程连接设置 控制面板(c…

Linux6版本系统搭建Open***远程访问

前言&#xff1a;open***是一个***工具,用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件,提供证书验证功能,也支持用户名密码认证登录方式,当然也支持两者合一,为服务器登录和连接提供更加安全的方式,可以在不同网络访问场所之间搭建类似于局域网的专用网…

【Smart_Point】unique_ptr与shared_ptr使用实例

shared_ptr使用实例 文章目录shared_ptr使用实例unique_ptr使用实例cv::fitLine中斜率为正无穷的情况&#xff0c;需要特殊考虑std::string path "D:\\code\\test_base_opencv\\example\\depth_98.raw";std::string save_path "D:\\code\\test_base_opencv\\e…

关于kNN、kMeans、Apriori算法小结

趁着准备即将到来的笔试&#xff0c;也为了回顾一下这一星期来所学的三个机器学习算法&#xff0c;觉得还是重新理一下思路&#xff0c;好理解一下这几个算法。 复制代码 kNN算法 即k-近邻算法&#xff0c;属监督学习。 概述 优点&#xff1a;精度高&#xff0c;对异常值不敏感…

[PHP] Phalcon操作示范

这篇内容将对下列操作进行示范&#xff1a; Insert、Select、Update、Calculation、Transaction、models advanced、dev-tools、cookies [ Insert ] &#xff08;1&#xff09; // 模型内操作&#xff0c;data是[字段>值]的一维数组。$bool $this->save($data);return $…

【C++】lambda 表达式

1.lambda 表达式 1.1 lambda 特点 lambda表示一个可调用单元&#xff0c;可视为内联函数 范式 : 具有一个返回类型&#xff0c;一个参数列表&#xff0c;一个函数体 [captrue list](parameters list)->return type {function body} captrue list 捕获列表是一个lambda所…

8位图像的双边滤波器实现

static void bilateralFilter_8u( const Mat& src, Mat& dst, int d,double sigma_color, double sigma_space,int borderType ) {// 获取原始图像信息int cn src.channels();int i, j, maxk, radius;Size size src.size();CV_Assert( (src.type() CV_8UC1 || src.t…

读取Cert格式证书的密钥

不想存储Cert证书内容&#xff0c;只想存储证书密钥&#xff0c;可通过以下2種方式实现 一、通過java读取证书的密钥出来&#xff1a; 1 package com.zat.ucop.service.util;2 3 import sun.misc.BASE64Encoder;4 5 import java.io.FileInputStream;6 import java.security.Pu…

图像导向滤波操作

#include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace std; using namespace cv; // 导向滤波器 cv::Mat guid…

【C++】bind参数绑定 P354(通用的函数适配器)

1. 什么时候该使用bing &#xff1f;什么时候该使用lambda&#xff1f; 当只有少数地方调用时候使用lambda,当需要多次调用lambda时&#xff0c;需要定义一个函数&#xff0c;而不是多次编译相同的lambda表达式。 调用bind的一般形式为&#xff1a; auto newCallable bind(cal…

[译] RabbitMQ tutorials (3) ---- 'Pub/Sub' (Javascript)

发布与订阅 &#xff08;Publish/Subscribe&#xff09; 在之前的章节中&#xff0c;我们创建了工作队列&#xff0c;之前的工作队列的假设是每个任务只被分发到一个worker。在这一节中&#xff0c;我们会做一些完全不一样的事--把一条消息发送给多个消费者&#xff0c;这个模式…