opencv1.0 iplimage与二维数组相互转换

#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(&copy); 
    cvDestroyAllWindows(); 
 
    //释放内存 
    for (i=0; i<m; i++) 
        delete [] p[i]; 
    delete [] p; 
 
    return 0; 
     
}

转:https://blog.csdn.net/jacke121/article/details/58621665

https://blog.csdn.net/zzuomo/article/details/8693979

https://blog.csdn.net/hanxiaoyong_/article/details/81566346

猜你喜欢

转载自blog.csdn.net/eric_e/article/details/85817061