Dlib学习笔记:dlib array2d与 OpenCV Mat互转
【尊重原创,转载请注明出处】 http://blog.csdn.net/guyuealian/article/details/77101603
在Dlib库中图像存储是使用array2d类型,而在OpenCV是使用Mat类型,Dlib中提供了#include <dlib/opencv.h>,可实现dlib array2d与 OpenCV Mat的互转。其中toMat对象可将dlib的图像转为OpenCV的Mat类型,而cv_image对象可将OpenCV的Mat类型转为dlib类型的图像。详见官网:
http://dlib.net/imaging.html#rgb_pixel
//dlib::array2d is an image already, you can use it for any dlib's image functions
//load image:
dlib::array2d<dlib::rgb_pixel> img_rgb;//使用dlib载入彩色的RGB图像
dlib::load_image(img_rgb, "test_image.jpg");
//convert to greyscale:
dlib::array2d<unsigned char> img_gray;//使用dlib载入灰度图像
dlib::load_image(img_gray, "test_image.jpg");
dlib::assign_image(img_gray, img_rgb);
//converto to OpenCV Image (cv::Mat):
#include <dlib/opencv.h>
#include <opencv2/opencv.hpp>
cv::Mat img = dlib::toMat(img_rgb);//RGB图像
cv::Mat img = dlib::toMat(img_gray);//灰度图像
//get image from OpenCV:
#include <dlib/opencv.h>
#include <opencv2/opencv.hpp>
cv::Mat img = cv::imread("test_image.jpg")
dlib::cv_image<rgb_pixel> dlib_img(img); // only stores pointer, no deep copy
//Documentation is here. There are a lot of well-documented examples, you should start from them. Special example about array2ddlib array2d转 OpenCV Mat时颜色失真
dlib array2d转 OpenCV Mat时,会出现颜色失真的现象,其解决方法是:http://blog.csdn.net/guyuealian/article/details/77482549
因为经常习惯的用OpenCV来做图像处理,所以难免希望将其他库的图像数据与OpenCV互转,所以今天就记录下这种互转的方法。
1、dlib::matrix/dlib::array2d转cv::Mat
前面说了,定义好一个matrix或者array2d的变量后,是可以通过nr()和nc()函数来获取图像的高度和宽度(行数和列数),然后我们可以通过image_data()来获取数据指针,这个时候要...
一、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、代码:
//将dli...
dlib::array2d is an image already, you can use it for any dlib's image functions
load image:
dlib::array2d img_rgb;
dlib::load_image(img_rgb, "test_image.jpg");
convert to greyscale:
dlib::array2d i
dlib的图像格式是array2d,opencv的图像格式是mat。在dlib代码中使用opencv的图像格式的话,我目前想到两种方法。假设D盘下面有一张图像lenna.bmp。array2d的读存图,可用下面两行代码:
load_image(arr2d的图像, 保存在电脑中的图像全路径);
//保存图像有几种格式
save_bmp(array2d图像, 保存到电脑的全路径)
save_pn
这个文章觉得理论讲的还好,但算法有点不太好一篇文章为你讲透双线性插值 - 知乎 (zhihu.com)
这个参考知乎彻底搞懂双线性插值 - 知乎 (zhihu.com),算法部分讲的比上面那个清楚,有Python实现。
Cpp实现
void CDib::Zoom(double times,CDib* buffer)
//空图片容
内容提要:本文主要实现了opencv中Mat矩阵与常用BGR24位彩色图像LPBYTE矩阵的转换。
注意1:每一行需要4字节对齐。
m_nScanLineSrc = ( m_nWidthSrc * m_nBitCountsSrc / 8 + 3 )/4*4;
注意2:动态获取Mat矩阵(x,y)处的图像数据。
*(m_ImgSrc.data + y*m_nScanLineSrc +
转载请注明出处:http://blog.csdn.net/ouyangying123/article/details/70850533本文章主要进行dlib中....\dlib-18.18\examples下的三个例子的实现。本小白用的是:VS2013 + dlib18.18 + opencv2.4.111.opencv用于读取数据源(待测图片、视频、摄像机等)。2.dlib用于人脸检测,特征点检
cv::Mat frame = cv::imread("test.jpg");
matrix<dlib::rgb_pixel> img;
assign_image(img,cv_image<rgb_pixel>(frame));
array2d<dlib::bgr_pixel>转Mat
dlib::array2d<dlib::bgr_pixel> img_bgr;//使用d