将MAT图像复制到c ++中的特定地址

时间:2018-03-21 12:24:18

标签: c++ linux opencv memcpy

我试图将从文件中加载的MAT图像复制到特定的地址位置。我有以下代码

int main()
{

    cv::Mat inImg =    cv::imread("M6_traffic.jpg");

    //Data point copy
    unsigned char * pData = (unsigned char *)inImg.data;
    unsigned char * Dest   = (unsigned char *)0x0f000000;;

    int width = inImg.rows;
    int height = inImg.cols;

    //data copy using memcpy function
    memcpy(Dest, pData, sizeof(unsigned char)*width*height*3);

}

但是,当我运行它时,它总是崩溃,任何想法为什么?并且有更好的原因吗?我的最终目标是能够将图像数据复制到基于Linux的系统中的特定地址

2 个答案:

答案 0 :(得分:1)

可能在地址0x0f000000上没有分配内存。 并且你不能强迫它成为有效的地址

使用malloc分配正确大小的内存,它将起作用。 然后操作系统确定您的地址空间并返回指向它的指针。

unsigned char* Dest = malloc(sizeof(pData));
memcpy(Dest, pData, sizeof(pData))

答案 1 :(得分:1)

0x0f000000本质上是一个空指针。您要做的是将数据复制到尚未使用memcpy(Dest, pData, sizeof(unsigned char)*width*height*3);设置的内存地址中。

您应该在Dest声明之前为memcpy分配内存。您可以使用malloccalloc执行此操作。以下链接描述了这些函数调用。希望这有帮助!

http://en.cppreference.com/w/c/memory/malloc

http://www.cplusplus.com/reference/cstdlib/calloc/