memcpy函数实现_等比例缩放c++ opencv 实现

de89e750c7cb4f73fd201ddf3d826744.png

背景:在目标检测算法中, 输入图片等比例resize时mAP比直接resize会高几个点。

实现:使用c++ 和opencv实现(之所以没用python,是因为用于生产环境)

先贴代码:

#include <math.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>using namespace cv;struct object_rect {int x;int y;int width;int height;
};int resize_uniform(Mat &src, Mat &dst, Size dst_size, object_rect &effect_area)
{int w = src.cols;int h = src.rows;int dst_w = dst_size.width;int dst_h = dst_size.height;std::cout << "src: (" << h << ", " << w << ")" << std::endl;dst = Mat(Size(dst_w, dst_h), CV_8UC3, Scalar(0));float ratio_src = w*1.0 / h;float ratio_dst = dst_w*1.0 / dst_h;int tmp_w=0;int tmp_h=0;if (ratio_src > ratio_dst) {tmp_w = dst_w;tmp_h = floor((dst_w*1.0 / w) * h);} else if (ratio_src < ratio_dst){tmp_h = dst_h;tmp_w = floor((dst_h*1.0 / h) * w);} else {resize(src, dst, dst_size);effect_area.x = 0;effect_area.y = 0;effect_area.width = dst_w;effect_area.height = dst_h;return 0;}std::cout << "tmp: (" << tmp_h << ", " << tmp_w << ")" << std::endl;Mat tmp;resize(src, tmp, Size(tmp_w, tmp_h));if (tmp_w != dst_w) { //高对齐,宽没对齐int index_w = floor((dst_w - tmp_w) / 2.0);std::cout << "index_w: " << index_w << std::endl;for (int i=0; i<dst_h; i++) {memcpy(dst.data+i*dst_w*3 + index_w*3, tmp.data+i*tmp_w*3, tmp_w*3);}effect_area.x = index_w;effect_area.y = 0;effect_area.width = tmp_w;effect_area.height = tmp_h;} else if (tmp_h != dst_h) { //宽对齐, 高没有对齐int index_h = floor((dst_h - tmp_h) / 2.0);std::cout << "index_h: " << index_h << std::endl;memcpy(dst.data+index_h*dst_w*3, tmp.data, tmp_w*tmp_h*3);effect_area.x = 0;effect_area.y = index_h;effect_area.width = tmp_w;effect_area.height = tmp_h;} else {printf("errorn");}return 0;
}int crop_effect_area(Mat &uniform_scaled, Mat &dst, Size ori_size, object_rect effect_area)
{Mat tmp = Mat(Size(effect_area.width, effect_area.height), CV_8UC3, Scalar(0));if(effect_area.x == 0 && effect_area.y == 0) {resize(uniform_scaled, dst, ori_size);return 0;} else if (effect_area.x == 0) {memcpy(tmp.data, uniform_scaled.data+effect_area.y*effect_area.width*3, effect_area.width*effect_area.height*3);} else if (effect_area.y == 0) {for (int i=0; i<effect_area.height; i++) {memcpy(tmp.data + i*effect_area.width*3, uniform_scaled.data+i*uniform_scaled.cols*3+effect_area.x*3, effect_area.width*3);}}resize(tmp, dst, ori_size);return 0;
}int main()
{Mat img = imread("test.jpg", 3);Mat dst;object_rect res_area;(void)resize_uniform(img, dst, Size(608, 608), res_area);imwrite("out.jpg", dst);std::cout << "effectiave area: (" << res_area.x << ", " << res_area.y << ", " << res_area.width << ", " << res_area.height << ")" << std::endl;Mat out = imread("out.jpg", 3);Mat recov;crop_effect_area(out, recov, Size(img.cols, img.rows), res_area);imwrite("recov.jpg", recov);return 0;
}

其中就两个函数:

1.等比例缩放函数:

int 

resize_uniform函数,输入原始src图像, 输入目的resize大小dst_size, 输出等比例resize图像dst, 以及等比例缩放后图像的有效区域effect_area(有效区域的左上角和长宽),下图分别是原始图像和resize_uniform函数处理后的dst图像:

e2037915c1098a6d6f2267188472b819.png
原始图像: 333*500

28d55c9d87ab196e51dfe09f10b26f87.png
等比例缩放后的图像:608*608, 有效区域:(x:0, y:102, w:608, h:404)

2. 等比例恢复函数:

int crop_effect_area(Mat &uniform_scaled, Mat &dst, Size ori_size, object_rect effect_area)

crop_effect_area函数输入等比例缩放后的图像uniform_scaled, 以及等比例缩放之前的原始图像大小ori_size, 等比例缩放后的有效区域effect_area, 输出为crop掉等比例缩放后的图像的黑边,然后resize到原始图像大小。

b6cc7694a3f1c5d33695df6ddedd679c.png
恢复后的图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

睡眠音频分割及识别问题(十一)--基于Android的YAMNet音频识别(总结)

WAV文件格式介绍 WAV文件遵守资源交换文件格式之规则&#xff0c;在文件的前44(或46)字节放置标头(header)&#xff0c;使播放器或编辑器能够简单掌握文件的基本信息&#xff0c;其内容以区块(chunk)为最小单位&#xff0c;每一区块长度为4字节&#xff0c;而区块之上则由子区…

黑白棋游戏水平(2)--pytorch剪裁

系统需求 Linux系统&#xff0c;并已安装git、gcc、g、cmake⼯具 下载源码 从github克隆Pytorch仓库 git clone --recursive https://github.com/pytorch/pytorch如果已经克隆过&#xff0c;则使⽤以下命令更新 git submodule sync git submodule update --init --recurs…

二维码图像去噪文献调研(1)--Real Image Denoising with Feature Attention

简介 &#xff08;1&#xff09; 论文&#xff08;包括期刊和发表时间&#xff09;&#xff1a; Real Image Denoising with Feature Attention&#xff08;ICCV 2019&#xff09; &#xff08;2&#xff09; 论文链接&#xff1a; https://arxiv.org/pdf/1904.07396.pdf &…

idea gui插件_给 IDEA 换了酷炫的主题,研发小姐姐看到:feel so high。。。

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]IntelliJ IDEA介绍IDEA&#xff0c;全称 IntelliJ IDEA &#xff0c;是 Java 语言的集成开发环境&#xff0c; IDEA 在业界被公认为是最好的 java 开发工具之一&#xff0c;尤其在智能 代码助手、代码自动提示、重构、 J2E…

华为荣耀电脑第三方linux,【第三方Linux版】荣耀MagicBook Pro 16.1英寸全面屏如何?某东入手评测...

这款【第三方Linux版】荣耀MagicBook Pro 16.1英寸全面屏轻薄笔记本电脑(酷睿i5 8G 512G MX250 IPS)冰河银&#xff0c;看网上评测推荐的&#xff0c;后面网上种草了这款笔记本&#xff0c;用过一段日子了&#xff0c;分享使用感受如下&#xff1a;一、【第三方Linux版】荣耀Ma…

二维码提升对比度文献调研(1)--Fast Image Processing with Fully-Convolutional Networks

简介 (1) 论文 &#xff08;期刊和发表时间&#xff09; Fast Image Processing with Fully-Convolutional Networks (ICCV 会议 2017) (2) 论文链接 https://openaccess.thecvf.com/content_iccv_2017/html/Chen_Fast_Image_Processing_ICCV_2017_paper.html (3) 源代码链接 …

linux下 c语言 用write open二进制写文件,Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作-Go语言中文社区...

一、前言在做一个镜头的初始化操作&#xff0c;需要加载一个648*522像素大小的文件&#xff0c;厂商提供的是一个excel表&#xff0c;如果要加载数据&#xff0c;可用加载txt文本的方式&#xff0c;我选用二进制方式加载文件&#xff1b;大家都知道电脑真正执行的不是高级语言&…

二维码提升对比度文献调研(2)--Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement

简介 论文 &#xff08;期刊和发表时间&#xff09; Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement (CVPR 会议 2020)论文链接 https://openaccess.thecvf.com/content_CVPR_2020/html/Guo_Zero-Reference_Deep_Curve_Estimation_for_Low-Light_Imag…

python打开是什么样子的图片_黑洞6问:黑洞内部是什么样子?黑洞图片发布,理论和实测的碰撞...

在科学领域&#xff0c;没有什么比你在第一次观察或实验结果中验证一个长期的理论预测时更令人兴奋的了。2012年&#xff0c;大型强子对撞机揭示了希格斯玻色子——标准模型中最后未发现的基本粒子的存在。 几年前&#xff0c;LIGO合作直接探测到了引力波&#xff0c;证实了对爱…

二维码提升对比度文献调研(3)--A Low-Complexity Algorithm for Contrast Enhancement of Digital Images

简介 &#xff08;1&#xff09;论文&#xff08;包括期刊和发表时间&#xff09;&#xff1a;A Low-Complexity Algorithm for Contrast Enhancement of Digital Images &#xff08;2&#xff09;论文链接&#xff1a; http://www.mecs-press.net/ijigsp/ijigsp-v10-n2/IJIG…

安卓checkbox无响应_【安卓手机】无法连接电脑的解决方法

转自&#xff1a;广西南宁平衡信息技术有限公司&#xff0c;作者&#xff1a;平衡LivY一般在对手机的数据采集过程中&#xff0c;尤其是安卓手机&#xff0c;最令人头疼的就是手机接入电脑后无法识别。相信以下窗口是大家在做手机取证的时候最不想看到的。那么这里大伙就会有疑…

linux s删除第一行,Linux文本处理三驾马车之一sed

sed对"行"操作动作含义a &#xff1a;新增&#xff0c; a 接字串&#xff0c;而这些字串会在新的一行出现(目前的下一行)&#xff5e;sed 1a\llll llllllll \n lllllll t.txtnl /etc/passwd | sed 2a drink teased -i $a# This is a test regular_express.txt ####文…

二维码提升对比度文献调研(4)--Attention Guided Low-light Image Enhancement

简介 &#xff08;1&#xff09;论文2&#xff1a; Attention Guided Low-light Image Enhancement with a Large Scale Low-light Simulation Dataset &#xff08;2&#xff09;论文链接&#xff1a; https://arxiv.org/pdf/1908.00682v3.pdf &#xff08;3&#xff09;源代…

函数传参string_C/C++的三种函数传值方式及其区别

C/C函数传参方式我想很多朋友应该都知道&#xff0c;但是不同传参方式的背后他们的区别是什么我想很多人并不那么清楚。本文就给大家揭露一下各传参方式的区别。传参方式有这三种&#xff1a;值传递、引用传递、指针传递大家可以去看三种传递方式的写法的区别&#xff0c;关于写…

二维码提升对比度文献调研(5)--DeepLPF: Deep Local Parametric Filters for Image Enhancement

简介 &#xff08;1&#xff09;论文名称&#xff1a; DeepLPF: Deep Local Parametric Filters for Image Enhancement CVPR 2020 &#xff08;2&#xff09;论文链接&#xff1a; https://arxiv.org/abs/2003.13985 &#xff08;3&#xff09;源代码&#xff1a; https://gi…

c语言单选题大全,C语言单选题(五)

1.C语言结构体类型变量在程序执行期间(C)。A.部分成员驻留在内存中B.只有一个成员驻留在内存中C.所有成员一直驻留在内存中D.没有成员驻留在内存中2.当定义一个结构体变量时&#xff0c;系统分配给它的内存是(D)。A.结构中最后一个成员所需内存量B.结构中第一个成员所需内存量C…

java 匿名函数_Java 理论与实践,闭包之争

Java 语言是否应增加闭包以及如何添加&#xff1f;在跨越边界 系列最近的一篇文章中&#xff0c;我的朋友兼同事 Bruce Tate 以 Ruby 为例描述了闭包的强大功能。最近在安特卫普召开的 JavaPolis 会议上&#xff0c;听众人数最多的演讲是 Neal Gafter 的 “向 Java 语言增加闭包…

二维码识别中面临的主要问题

问题描述 下面有两个二维码的图片&#xff1a; 这两个二维码其实是一样的&#xff0c;也就是二维码码制在设计的时候&#xff0c;其实不需要那么大的黑点&#xff0c;只需要中心一小部分即可。 问题一&#xff1a;在优化二维码的过程中&#xff0c;能否考虑优化边缘部分&…

lia人是什么意思_69年属鸡人终身灾难是什么意思

69年属鸡人终身灾难是什么意思69年出生的生肖鸡&#xff0c;他们为人正直&#xff0c;有一颗转速飞快的脑袋&#xff0c;做事勤快&#xff0c;对生活非常乐观&#xff0c;但是因为过于自信总是做一些自己能力还不够的事&#xff0c;有句老话说的好“大难不死&#xff0c;必有后…

睡眠声音识别中的准确率问题(一)--问题描述及评价指标

1 问题描述 如何定义一个评价指标来评估睡眠声音识别中的准确率&#xff1f; 1.1 按照评分如何设计评价指标 睡眠声音识别预测的结果是一个概率分布&#xff0c;如下表所示&#xff1a; c1c_1c1​c2c_2c2​c3c_3c3​snortspeechcough0.50.20.70.550.450.77 在这种场景下&…