#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
int main(int argc, char* argv[])
{
IplImage *src = cvLoadImage("lena.jpg", 0);
cvNamedWindow("source", 1);
cvShowImage("source", src);
cvWaitKey();
int m = src->height;
int n = src->width;
int i, j;
printf("channel = %d", src->nChannels);
// 分配内存
int **p;
p = new int *[m];
for (i=0; i<m; i++)
{
p[i] = new int[n];
}
// 将图像数据存到二位数组中
//CvScalar s;
//for (i=0; i<m; i++)
//{
// for (j=0; j<n; j++)
// {
// s = cvGet2D(src, i, j);
// p[i][j] = s.val[0];
// }
//}
/**************************************/
// 或者
uchar *ptr;
for (i=0; i<m; i++)
{
ptr = (uchar*)src->imageData + i*src->widthStep;
for (j=0; j<n; j++)
{
p[i][j] = (int)*(ptr+j);
}
}
/**************************************/
// 将二位数组中的数据载入新的单通道灰度图像中,看是否和原图一致
IplImage *copy = cvCreateImage(cvGetSize(src), 8, 1);
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
cvSetReal2D(copy, i, j, p[i][j]);
}
}
// 显示图像副本
cvNamedWindow("copy", 1);
cvShowImage("copy", copy);
cvWaitKey();
// 释放图像
cvReleaseImage(&src);
cvReleaseImage(©);
cvDestroyAllWindows();
//释放内存
for (i=0; i<m; i++)
delete [] p[i];
delete [] p;
return 0;
}
将Opencv中的IPlimage对象的数据与二维数组之间的互相转换
最新推荐文章于 2022-09-19 16:18:31 发布