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

【Dlib】dlib和opencv的互转

一、dlib::matrix转换成cv::Mat
1、注意事项:

1)将dlib::matrix转成BGR格式后,再转换成cv::Mat,因为cv::Mat中是按照BGR顺序存储
2)注意最后添加的cv::Mat::clone()函数,因为dlib::toMat(tmp)返回的mat数据部分在tmp中,tmp是临时变量,因此在函数返回前,执行clone()操作。

2、代码:
//将dlib::matrix转成BGR格式后,再转换成cv::Mat,因为cv::Mat中是按照BGR顺序存储
template <typename T, long NR, long NC, typename mm, typename l>
void dlibMatrix2cvBGR(cv::Mat &dest, const dlib::matrix<T, NR, NC, mm, l> &src)
{dlib::matrix<dlib::bgr_pixel> tmp;dlib::assign_image(tmp, src);dest = dlib::toMat(tmp).clone();
}//将dlib::matrix直接转成cv::Mat,尽量保持原样;将rgb、rgba转换成bgr、bgra;
//注意该方法有一个bug,无法识别bgr格式,因此会错误的将bgr转成成rgb。
template <typename T, long NR, long NC, typename mm, typename l>
void dlibMatrix2cv(cv::Mat &dest, dlib::matrix<T, NR, NC, mm, l> &src)
{//声明dlib命名空间,否则编译会报错using namespace dlib;dest = dlib::toMat(src);if (dlib::pixel_traits<T>::rgb){cv::cvtColor(dest, dest, cv::COLOR_RGB2BGR);} else if (dlib::pixel_traits<T>::rgb_alpha) {cv::cvtColor(dest, dest, cv::COLOR_RGBA2BGRA);}else if (dlib::pixel_traits<T>::hsi) {//使用原生的数据,不做转换//cv::cvtColor(dest, dest, cv::COLOR_HSV2BGR);}else if (dlib::pixel_traits<T>::lab) {//使用原生的数据,不做转换//cv::cvtColor(dest, dest, cv::COLOR_Lab2BGR);}else if (dlib::pixel_traits<T>::grayscale) {}
}
二、cv::Mat 转 dlib::matrix
1、注意事项

1)cv::Mat转dlib::matrix时,要注意matrix的模板类型和mat的类型要匹配否则报错,
可以在转换前判读类型是否合法(如下面代码所示),或者使用try-catch异常处理

**************************** FATAL ERROR DETECTED ****************************Error detected at line 36.
Error detected in file ../../../../lib_3rd/dlib-19.17/include/dlib/opencv/cv_image.h.
Error detected in function dlib::cv_image<pixel_type>::cv_image(cv::Mat) [with pixel_type = unsigned char].Failing expression was img.depth() == cv::DataType<typename pixel_traits<pixel_type>::basic_pixel_type>::depth && img.channels() == pixel_traits<pixel_type>::num.
The pixel type you gave doesn't match pixel used by the open cv Mat object.img.depth():    0img.cv::DataType<typename pixel_traits<pixel_type>::basic_pixel_type>::depth: 0img.channels(): 3img.pixel_traits<pixel_type>::num: 1******************************************************************************

2)cv::Mat中像素按BGR格数存储,因此将mat转换成

dlib::matrix<dlib::bgr_pixel>

2、代码

//根据cv::Mat::type()的类型,使用不同的type_pixel加载到dlib::cv_image,
//并转换成dlib::matrix<dlib::bgr_pixel>格式
int cvMat2dlib(dlib::matrix<dlib::bgr_pixel> &dest, const cv::Mat &src)
{cv::Mat tmp;switch (src.type()) {case CV_8UC3:dlib::assign_image(dest, dlib::cv_image<dlib::bgr_pixel>(src));break;case CV_8UC4:tmp = src.clone();cv::cvtColor(tmp, tmp, cv::COLOR_BGRA2RGBA);dlib::assign_image(dest, dlib::cv_image<dlib::rgb_alpha_pixel>(tmp));break;case CV_8UC1:dlib::assign_image(dest, dlib::cv_image<unsigned char>(src));break;default:return GW_ERR_ARG;break;}return GW_ERR_OK;
}
三、dlib::rectangle和cv::Rect互转
1、注意事项

cv::Rect:表示的矩形包含顶部和左边界,但是不包含右边界和底边界。
dlib::rectangle:表示的矩形包括所有边界,因此转换函数必须注意将右下角移动1。

// cv::Rect:表示的矩形包含顶部和左边界,但是不包含右边界和底边界。
//dlib::rectangle:表示的矩形包括所有边界,因此转换函数必须注意将右下角移动1。
cv::Rect dlibRect2cvRect(const dlib::rectangle &r)
{return cv::Rect(cv::Point2i(r.left(), r.top()), cv::Point2i(r.right() + 1, r.bottom() + 1));
}dlib::rectangle cvRect2dlibRect(const cv::Rect &r)
{return dlib::rectangle((long)r.tl().x, (long)r.tl().y, (long)r.br().x - 1, (long)r.br().y - 1);
}

相关文章:

原创 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军

原创 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军 02972018-04-29 16:15:27 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军 齐鲁晚报 2018年04月29日 2018年4月29日&#xff0c;山东省临沂市临沭县&#xff0c;一位年轻的小伙子。吴忠军&#xff0c;山东…

百度SLG拿下前锤子科技CTO钱晨,还要合并小鱼在家? | 极客头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑整理 | 一一出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;2016 年 7 月&#xff0c;锤子科技前 CTO 钱晨从该公司退休的消息被证实&#xff0c;关于其离职的…

【Dlib】dlib实现深度网络学习之 input层

1、 dlib::input 模板类&#xff0c;深度神经网络的简单输入层&#xff0c;它将某种图像作为输入并将其加载到网络中。 这是一个基本的输入层&#xff0c;它只是简单地将图像复制到一个张量中。 注意&#xff1a;dlib::input只支持输入dlib::matrix和dlib::array2d类型&#x…

首发 | 13篇京东CVPR 2019论文!你值得一读~ 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑编者按&#xff1a;计算机视觉和模式识别大会 CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;作为人工智能领域计算机视觉方向的重要学术会议…

Windows 活动目录(AD)服务器系统升级到2012之活动目录角色迁移(三)

4.5迁移服务器角色到AD20121. 打开powershell&#xff0c;使用命令迁移服务器角色到AD2008输入命令Ntdsutil输入命令Roles输入命令Connections输入命令Connect to server AD2012&#xff0c;连接AD2012控制器输入命令QUIT输入Transfer infrastructure master命令&#xff0c;转…

《星际争霸2》引擎技术解析

就在SIGGRAPH大会刚结束之后&#xff0c;AMD和暴雪在AMD官方网站上放出了《星际争霸II》的官方技术文档&#xff0c;通过游戏引擎技术的展示让星际迷们感受到越来越多的惊喜。画面优化给CPU带来考验着色方面&#xff0c;在使用原型的基础上利用3D Studio MAX让程序员对整体效果…

回顾与展望:大热的AutoML究竟是什么? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓&#xff0c;请扫码咨询 ↑↑↑来源 | 第四范式编者按&#xff1a;AutoML&#xff08;Automatic Machine Learning&#xff0c;自动机器学习&#xff09;旨在研究在没有专业知识的情况下使用的低门槛甚至零门槛的…

【Python】深度学习中将数据按比例随机分成随机 训练集 和 测试集的python脚本

深度学习中经常将数据分成 训练集 和 测试集&#xff0c;参考博客&#xff0c;修改python脚本 randPickAITrainTestData.py 。 功能&#xff1a;从 输入目录 中随机检出一定比例的文件或目录&#xff0c;移动到保存 测试集目录 中&#xff0c;原输入目录作为训练目录。 import…

docker 系列之 配置阿里云镜像加速器

1.登录阿里云 2.登录后找到右上角的“管理中心”,点击进入后》点击“镜像加速器”;剩下的安装文档配置就好 问题1&#xff1a;配置完后还是提示&#xff1a;Tag latest not found in repository 【本人也是在这里被困了好久,尝试了各种方法】 解决方案&#xff1a;最后发现这里…

LVM-HOWTO/学习笔记(二)

1. 在3块scsi磁盘上创建lv Run pvcreate on the disks # pvcreate /dev/sda # pvcreate /dev/sdb # pvcreate /dev/sdc Create a volume group # vgcreate my_volume_group /dev/sda /dev/sdb /dev/sdc/ Run vgdisplay to verify volume group # vgdisplay # vgdisplay…

【python】使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来

使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来 dataCleaning4multiple.py 源码如下&#xff1a; import os, random, shutil import sys, getopt import stringdef getDir(argv):inPath outPath num2try:opts, args getopt.getopt(argv,"hi:o:n:",[&…

EXP6 信息搜集与漏洞扫描

1.实验有关问题 &#xff08;1&#xff09;哪些组织负责DNS&#xff0c;IP的管理。 ICANN是一个集合了全球网络界商业、技术及学术各领域专家的非营利性国际组织&#xff0c;负责在全球范围内对互联网唯一标识符系统及其安全稳定的运营进行协调&#xff0c;它能决定域名和IP地址…

百度发的208亿春晚红包,靠这样的技术送到了你手上 | 解读

2019 年的春晚红包项目对百度而言是一次大考&#xff0c;背后需要强大的技术来支撑。如你所见&#xff0c;百度不负“技术大厂”的标签&#xff0c;春晚红包期间系统稳定运行&#xff0c;没有出现宕机事故。在这样一个庞大而复杂的项目面前&#xff0c;他们是如何去用技术去化解…

一步一步学Silverlight 2系列(10):使用用户控件

概述 Silverlight 2 Beta 1版本发布了&#xff0c;无论从Runtime还是Tools都给我们带来了很多的惊喜&#xff0c;如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython&#xff0c;对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlig…

何恺明的GN之后,权重标准化新方法能超越GN、BN吗? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | Siyuan Qiao、Huiyu Wang、Chenxi Liu、Wei Shen、Alan Yuille&#xff08;Johns Hopkins University&#xff0c;约翰霍普金斯大学&#xff09;译者 | 刘畅编辑 | Jane出品 | AI科…

【AI】CelebA数据介绍、下载及说明

1、简介 CeleA是香港中文大学的开放数据&#xff0c;包含10177个名人的202599张图片 官网&#xff1a;http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html 下载地址&#xff08;百度网盘&#xff0c;官方的&#xff09;&#xff1a;http://pan.baidu.com/s/1eSNpdRG 【python】…

Zend Framework Mail通过网易免费邮箱发送邮件

2019独角兽企业重金招聘Python工程师标准>>> 做为一个苦逼的个人站长&#xff0c;做一个小网站&#xff0c;本来愿意来看的人就不多&#xff0c;再弄一个不能找回密码的会员系统&#xff1f;基本上被判死刑了 。阿里云的短信也要钱啊&#xff0c;而且只支持PHP 5.5以…

将shp导入SDE中出现“表或视图不存在”问题

其原因是权限不够&#xff0c;下边代码可以用来检查权限是否够。 private void ESRILicense() { IAoInitialize mAoInitialize new AoInitializeClass(); esriLicenseStatus licenseStatus (esriLicenseStatus)mAoInitialize.IsProductCodeAvai…

【python】使用python脚本将CelebA中同一人的图片捡到对应单独的文件夹中

1、目的 CelebA的所有的照片都在一个文件夹中&#xff0c;为了能在dlib训练人脸识别时&#xff0c;方便使用&#xff0c;将CelebA中同一人的图片捡到对应单独的文件夹中。 【AI】CelebA数据介绍、下载及说明 2、方法 首先创建10178个目录&#xff0c;然后解析Anno/identity_…

仅用语音,AI就能“脑补”你的脸! | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | Wav2pix 研究团队译者 | 刘畅编辑 | Jane出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;【导语】之前我们为大家介绍过一项非常酸爽的研究“Talking…

如何在SAP云平台上使用MongoDB服务

首先按照我这篇文章在SAP云平台上给您的账号分配MongboDB服务&#xff1a;如何在SAP云平台的Cloud Foundry环境下添加新的Service 然后从这个链接下载SAP提供的例子程序。 1. 使用命令行 cf marketplace查看当前SAP云平台的MongoDB的版本号&#xff1a;在我使用的SAP云平台上是…

C#中将dll汇入exe,并加壳

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 1、合并file1.dll、file2.dll到destination.dll ILmerge /ndebug /target:dll /out:C:\destination.dll /log C:\file1.dll C:\file2.dll 2、合并file1.dll、file2.dll以及myApp.exe…

【AI】dlib中图像标注工具 imglab 详细说明

一、基本用法 imglab是一个在图像上标注矩形的工具。基本方法 1> 获取图片列表&#xff1a;./imglab -c mydataset.xml /tmp/images&#xff0c;/tmp/images为保存图像的文件夹 2> 标注每个图片&#xff1a;./imglab mydataset.xml&#xff0c;使用shift鼠标左键拖动来选…

最萌算法学习来啦,看不懂才怪!| 码书

普通程序员&#xff0c;不学算法&#xff0c;也可以成为大神吗&#xff1f;对不起&#xff0c;这个&#xff0c;绝对不可以。可是算法好难啊~~看两页书就想睡觉……所以就不学了吗&#xff1f;就一直当普通程序员吗&#xff1f;如果有一本算法书&#xff0c;看着很轻松……又有…

Redis 缓存设计原则

基本原则 只应将热数据放到缓存中 所有缓存信息都应设置过期时间 缓存过期时间应当分散以避免集中过期 缓存key应具备可读性 应避免不同业务出现同名缓存key 可对key进行适当的缩写以节省内存空间 选择合适的数据结构 确保写入缓存中的数据是完整且正确的 避免使用耗时…

最强大,最简洁的【禁止输入中文】

方法一&#xff1a;禁止中文输入法 <input type"text" style"ime-mode:disabled">方法二&#xff1a;禁止黏贴&#xff0c;禁止拖拽&#xff0c;禁止中文输入法&#xff01;这种方法是最强的禁止 中文输入 <input type"text" οnpaste…

无监督机器学习中,最常见4类聚类算法总结 | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑编译 | 安然、狄思云来源 | 读芯术&#xff08;ID&#xff1a;AI_Discovery&#xff09;在机器学习过程中&#xff0c;很多数据都具有特定值的目标变量&#xff0c;我们可以用它们来训练模…

自动红眼移除算法 附c++完整代码

说起红眼算法&#xff0c;这个话题非常古老了。 百度百科上的描述&#xff1a; “红眼”一般是指在人物摄影时&#xff0c;当闪光灯照射到人眼的时候&#xff0c;瞳孔放大而产生的视网膜泛红现象。 由于红眼现象的程度是根据拍摄对象色素的深浅决定的&#xff0c;如果拍摄对象的…

【Dlib】在GPU环境中运行dlib中的例子dnn_mmod_ex报错...dlib::cuda_error...Error while calling cudaMalloc...

1、问题描述 在GPU环境下运行dlib中的例子dnn_mmod_ex时&#xff0c;报错&#xff1a; terminate called after throwing an instance of dlib::cuda_errorwhat(): Error while calling cudaMalloc(&data, new_size*sizeof(float)) in file /home/laoer/tools/dlib/dlib…

Exchange 2010正式发布了

2009年11月9号&#xff0c;Exchange 2010正式发布了&#xff0c;下载地址&#xff1a;http://www.microsoft.com/downloa ... 0-879f-d74208d6171d简体中文64位120天试用版转载于:https://blog.51cto.com/287416363/657202