代码片段~

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的更多相关文章

  1. opencv在图像显示中文

    在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...

  2. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  3. opencv源码:cascadedetect

    级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...

  4. 基于OpenCV的车辆检测与追踪的实现

    最近老师布置了一个作业,是做一个基于视频的车辆检测与追踪,用了大概两周的时间做了一个简单的,效果不是很理想,但抑制不住想把自己的一些认识写下来,这里就把一些网络上的博客整理一下分享给大家,希望帮助到大 ...

  5. OpenCV人脸识别Eigen算法源码分析

    1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...

  6. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  7. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

  8. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  9. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)

    我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...

随机推荐

  1. [LeetCode] Brick Wall 砖头墙壁

    There is a brick wall in front of you. The wall is rectangular and has several rows of bricks. The b ...

  2. [HNOI 2008]越狱

    Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果 相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 I ...

  3. [测试题]数组(array)

    Description Input Output Sample Input1 3 2 75 4 2 Sample Output1 999999732 Sample Explanation1 Sampl ...

  4. [POI2006]ORK-Ploughing

    Description Byteasar想耕种他那块矩形的田,他每次能耕种矩形的一边(上下左右都行),在他每次耕完后,剩下的田也一定是矩形,每块小区域边长为1,耕地的长宽分别为m和n,不幸的是Byte ...

  5. ●BZOJ 4566 [Haoi2016]找相同字符

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4566题解: 广义后缀自动机 对两个串同时建立一个广义后缀自动机. 同时统计出每个状态对两个串 ...

  6. 【USACO】 奶牛会展

    题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由于负的智商或情商会造成 ...

  7. UVA129 —— Krypton Factor (氪因素)

    Input and Output In order to provide the Quiz Master with a potentially unlimited source of question ...

  8. 2015 多校联赛 ——HDU5303(贪心)

    Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  9. poj 3904(莫比乌斯反演)

    POJ 3904 题意: 从n个数中选择4个数使他们的GCD = 1,求总共有多少种方法 Sample Input 4 2 3 4 5 4 2 4 6 8 7 2 3 4 5 7 6 8 Sample ...

  10. [NOI2011]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 省选完挂.但是善良的教练今天丢了一套NOI2011给我们训练 6道题233(虽然一道题做过了,一道题普及组的都会,就算是4道吧) 熬了一天,总 ...