OpenCV, MatBGR2ARGB, ARGB2MatBGR
代码片段~
unsigned int* abMatBGR2ARGB(Mat imag) { int nCols; int nRows; unsigned int *pbuff = NULL; if(imag.empty()) { cerr << "Failed read the image data." << endl; return NULL; } if (imag.dims != 2) { cerr << "not a image data" << endl; return NULL; } nCols = imag.cols; nRows = imag.rows; pbuff = new unsigned int[nCols*nRows]; if (!pbuff) { cerr << "failed to allocate memory for the input image." << endl; return NULL; } if (imag.depth()!=CV_8U || imag.channels() != 3) { cerr << "error type of image channels and depth." << endl; return NULL; } Vec3b pix; uchar *tp=NULL; for (int row = 0; row < nRows; row++) { for (int col = 0; col < nCols; col++) { pix = imag.at<Vec3b>(row, col); tp = (uchar*)(pbuff + row*nCols + col); tp[0] = 0;//A tp[1] = pix[2];//R tp[2] = pix[1];//G tp[3] = pix[0];//B } } return pbuff; } void abARGB2MatBGR(unsigned int *pbuff, int nRows, int nCols, Mat &imag) { uchar *tp=NULL; imag.create(nRows, nCols, CV_8UC3); for (int row = 0; row < nRows; row++) { for (int col = 0; col < nCols; col++) { tp = (uchar*)(pbuff + row*nCols + col); imag.at<Vec3b>(row, col)[0] = tp[3]; imag.at<Vec3b>(row, col)[1] = tp[2]; imag.at<Vec3b>(row, col)[2] = tp[1]; } } }
测试代码:
#include <iostream> #include <cmath> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; unsigned int* abMatBGR2ARGB(Mat imag) { int nCols; int nRows; unsigned int *pbuff = NULL; if(imag.empty()) { cerr << "Failed read the image data." << endl; return NULL; } if (imag.dims != 2) { cerr << "not a image data" << endl; return NULL; } nCols = imag.cols; nRows = imag.rows; pbuff = new unsigned int[nCols*nRows]; if (!pbuff) { cerr << "failed to allocate memory for the input image." << endl; return NULL; } if (imag.depth()!=CV_8U || imag.channels() != 3) { cerr << "error type of image channels and depth." << endl; return NULL; } Vec3b pix; uchar *tp=NULL; for (int row = 0; row < nRows; row++) { for (int col = 0; col < nCols; col++) { pix = imag.at<Vec3b>(row, col); tp = (uchar*)(pbuff + row*nCols + col); tp[0] = 0;//A tp[1] = pix[2];//R tp[2] = pix[1];//G tp[3] = pix[0];//B } } return pbuff; } void abARGB2MatBGR(unsigned int *pbuff, int nRows, int nCols, Mat &imag) { uchar *tp=NULL; imag.create(nRows, nCols, CV_8UC3); for (int row = 0; row < nRows; row++) { for (int col = 0; col < nCols; col++) { tp = (uchar*)(pbuff + row*nCols + col); imag.at<Vec3b>(row, col)[0] = tp[3]; imag.at<Vec3b>(row, col)[1] = tp[2]; imag.at<Vec3b>(row, col)[2] = tp[1]; } } } int main() { Mat im = imread("../opencvt.jpeg"); if (im.empty()) { cerr << "empty" << endl; return -1; } imshow("org", im); cvWaitKey(); unsigned int *pbuff = NULL; pbuff = abMatBGR2ARGB(im); Mat nIm; abARGB2MatBGR(pbuff, im.rows, im.cols, nIm); imshow("new", nIm); cvWaitKey(); delete[] pbuff; return 0; }
OpenCV, MatBGR2ARGB, ARGB2MatBGR的更多相关文章
- opencv在图像显示中文
在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- opencv源码:cascadedetect
级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...
- 基于OpenCV的车辆检测与追踪的实现
最近老师布置了一个作业,是做一个基于视频的车辆检测与追踪,用了大概两周的时间做了一个简单的,效果不是很理想,但抑制不住想把自己的一些认识写下来,这里就把一些网络上的博客整理一下分享给大家,希望帮助到大 ...
- OpenCV人脸识别Eigen算法源码分析
1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...
- OpenCV人脸识别LBPH算法源码分析
1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...
- OpenCV模板匹配算法详解
1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...
随机推荐
- Field的getModifiers()方法返回int类型值表示该字段的修饰符
其中,该修饰符是java.lang.reflect.Modifier的静态属性. 对应表如下: PUBLIC: 1PRIVATE: 2PROTECTED: 4STATIC: 8FINAL: 16SYN ...
- [HNOI 2010]Bus 公交线路
Description 题库链接 有 \(N\) 个车站, \(K\) 条公交线路.第 \(1\) 到 \(K\) 站是这 \(K\) 线路的起点站.第 \(N-K+1\) 到 \(N\) 是终点站. ...
- [NOI 2010]航空管制
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...
- [bzoj1488][HNOI2009]图的同构——Polya定理
题目大意 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是指a图的顶点经过一定的重新标号以后,a图的顶点集和边集能完全与b ...
- 【BZOJ2243】【SDOI2011】染色
题意见试题传送门 解题思路:显然是题树剖题. 考虑用线段树维护区间端点颜色与颜色数,这样就可以方便的合并,注意查询的时候对端点的特殊处理即可. 时间效率最高为\( O (m \log^{2} n) \ ...
- [BSGS算法]纯水斐波那契数列
学弟在OJ上加了道"非水斐波那契数列",求斐波那契第n项对1,000,000,007取模的值,n<=10^15,随便水过后我决定加一道升级版,说是升级版,其实也没什么变化,只 ...
- bzoj4447[Scoi2015]小凸解密码
4447: [Scoi2015]小凸解密码 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 150 Solved: 58[Submit][Status ...
- django rest-framework 3.类 实现restful
上节提到过,REST框架分别提供了对函数和类的装饰器,之前已经都是通过函数来写视图函数的,现在来尝试使用class 类来实现视图函数 使用基于类编写API视图,允许重用常用的功能,减少代码重复. 一. ...
- C# 解决winform 窗体控件在窗体变化时闪烁的问题
在窗体form代码中加入如下代码即可: protected override CreateParams CreateParams { get { CreateParams cp = base.Crea ...
- Jvm原理剖析与调优之内存结构
一些不得不说的概念 JVM JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机包括一套字节码指令集.一组寄存器.一个栈.一个 ...