JS技术

【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析 - 【C++游戏编程】微软最有价值专家—毛星云(浅(2)

字号+ 作者:H5之家 来源:H5之家 2015-12-13 10:14 我要评论( )

Mat image0=imread(dota.jpg,CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//载入最真实的图像Mat image1=imread(dota.jpg,0);//载入灰度图Mat image2=imread(dota.jpg,199);//载入3通道的彩色图像Mat logo=i

 

Mat image0=imread("dota.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//载入最真实的图像 Mat image1=imread("dota.jpg",0);//载入灰度图 Mat image2=imread("dota.jpg",199);//载入3通道的彩色图像 Mat logo=imread("dota_logo.jpg");//载入3通道的彩色图像



class CV_EXPORTS _InputArray { public: enum { KIND_SHIFT = 16, FIXED_TYPE = 0x8000 << KIND_SHIFT, FIXED_SIZE = 0x4000 << KIND_SHIFT, KIND_MASK = ~(FIXED_TYPE|FIXED_SIZE) - (1 << KIND_SHIFT) + 1, NONE = 0 <<KIND_SHIFT, MAT = 1 <<KIND_SHIFT, MATX = 2 <<KIND_SHIFT, STD_VECTOR = 3 <<KIND_SHIFT, STD_VECTOR_VECTOR = 4 << KIND_SHIFT, STD_VECTOR_MAT = 5 <<KIND_SHIFT, EXPR = 6 <<KIND_SHIFT, OPENGL_BUFFER = 7 <<KIND_SHIFT, OPENGL_TEXTURE = 8 <<KIND_SHIFT, GPU_MAT = 9 <<KIND_SHIFT, OCL_MAT =10 <<KIND_SHIFT }; _InputArray(); _InputArray(const Mat& m); _InputArray(const MatExpr& expr); template<typename _Tp> _InputArray(const _Tp* vec, int n); template<typename _Tp> _InputArray(const vector<_Tp>&vec); template<typename _Tp> _InputArray(constvector<vector<_Tp> >& vec); _InputArray(const vector<Mat>& vec); template<typename _Tp> _InputArray(const vector<Mat_<_Tp>>& vec); template<typename _Tp> _InputArray(const Mat_<_Tp>& m); template<typename _Tp, int m, int n> _InputArray(constMatx<_Tp, m, n>& matx); _InputArray(const Scalar& s); _InputArray(const double& val); // < Deprecated _InputArray(const GlBuffer& buf); _InputArray(const GlTexture& tex); // > _InputArray(const gpu::GpuMat& d_mat); _InputArray(const ogl::Buffer& buf); _InputArray(const ogl::Texture2D& tex); virtual Mat getMat(int i=-1) const; virtual void getMatVector(vector<Mat>& mv) const; // < Deprecated virtual GlBuffer getGlBuffer() const; virtual GlTexture getGlTexture() const; // > virtual gpu::GpuMat getGpuMat() const; /*virtual*/ ogl::Buffer getOGlBuffer() const; /*virtual*/ ogl::Texture2D getOGlTexture2D() const; virtual int kind() const; virtual Size size(int i=-1) const; virtual size_t total(int i=-1) const; virtual int type(int i=-1) const; virtual int depth(int i=-1) const; virtual int channels(int i=-1) const; virtual bool empty() const; #ifdefOPENCV_CAN_BREAK_BINARY_COMPATIBILITY virtual ~_InputArray(); #endif int flags; void* obj; Size sz; };


 

函数解析:

imwrite函数用于将图像保存到指定的文件。图像格式是基于文件扩展名的,可保存的扩展名和imread中可以读取的图像扩展名一样,为了方便查看,我们在这里再列一遍:

#include <vector> #include <stdio.h> #include<opencv2/opencv.hpp> using namespace cv; using namespace std; void createAlphaMat(Mat &mat) { for(int i = 0; i < mat.rows; ++i) { for(int j = 0; j < mat.cols; ++j) { Vec4b&rgba = mat.at<Vec4b>(i, j); rgba[0]= UCHAR_MAX; rgba[1]= saturate_cast<uchar>((float (mat.cols - j)) / ((float)mat.cols) *UCHAR_MAX); rgba[2]= saturate_cast<uchar>((float (mat.rows - i)) / ((float)mat.rows) *UCHAR_MAX); rgba[3]= saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2])); } } } int main( ) { //创建带alpha通道的Mat Mat mat(480, 640, CV_8UC4); createAlphaMat(mat); vector<int>compression_params; compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION); compression_params.push_back(9); try{ imwrite("透明Alpha值图.png", mat, compression_params); } catch(runtime_error& ex) { fprintf(stderr,"图像转换成PNG格式发生错误:%s\n", ex.what()); return1; } fprintf(stdout,"PNG图片文件的alpha数据保存完毕~\n"); return 0; }




五、一个综合示例



最后是一个综合示例,载入图像,进行简单图像混合,显示图像,并且输出混合后的图像到jpg。

由于篇幅原因,这里的图像混合具体细节我们放到稍后的文章中再讲,现在先给大家看看混合的效果和源码。囧,因为opencv图像处理真的很少涉及到设计模式的问题,所以很多时候往往就是main函数中塞满一串串代码打天下,即便是OpenCV官方的示例都是如此。

好了,如下就是这篇文章配套综合示例的配套源码,非常的简单明了:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 正式使用opencv里的训练和检测 - opencv_createsamples、opencv_traincascade

    正式使用opencv里的训练和检测 - opencv_createsamples、opencv_trai

    2015-12-15 08:44

  • 2015年最新Android基础入门教程目录(完结版) - coder-pig的猪栏 - 博客频道 - CSDN.NET

    2015年最新Android基础入门教程目录(完结版) - coder-pig的猪栏 - 博

    2015-12-14 15:12

  • JavaScript入门教程(二)_javascript教程教程

    JavaScript入门教程(二)_javascript教程教程

    2015-10-10 14:25

  • JavaScript入门教程(五)_javascript教程教程

    JavaScript入门教程(五)_javascript教程教程

    2015-10-10 14:21

网友点评
a