读取图像并使用opencv将该图像的数据复制到文本文件中

读取图像并使用opencv将该图像的数据复制到文本文件中,c,opencv,C,Opencv,我正在读取一个通道中的图像,实际上我需要读取图像的数据,以便我可以对该源数据进行一些图像计算,并将结果存储在目标中。 我的目的是将opencv转换为C函数,为此,我将按如下步骤逐步实现: 读取图像时,需要获取文本文件中的图像数据 其他图像的参考数据已经存在于文本中 文件,需要对从中获得的源数据进行一些计算 我阅读参考资料,我已经在文本中 应在源图像上执行图像扭曲并存储在 目标图像 代码段如下所示: char* fpath = "C:/Users/Desktop/ImWarping/test.bm

我正在读取一个通道中的图像,实际上我需要读取图像的数据,以便我可以对该源数据进行一些图像计算,并将结果存储在目标中。 我的目的是将opencv转换为C函数,为此,我将按如下步骤逐步实现:

  • 读取图像时,需要获取文本文件中的图像数据
  • 其他图像的参考数据已经存在于文本中 文件,需要对从中获得的源数据进行一些计算 我阅读参考资料,我已经在文本中
  • 应在源图像上执行图像扭曲并存储在 目标图像
  • 代码段如下所示:

    char* fpath = "C:/Users/Desktop/ImWarping/test.bmp";
    
        for (;;) {
            Mat src;
            src = imread(fpath, 0);
            if (!src.data)
            {
                while (1);
            }
            Mat dst(640, 1280, CV_8UC1);
    
            // Perform Image Warping
            warpIm(mLUT, src.data, dst.data, src.cols, src.rows, dst.cols, dst.rows);
    
            // Display
            imshow("Original Video", src);
            imshow("Corrected Video", dst);
    
            waitKey(100000);
    
            if (waitKey(1) >= 0) {
                break;
            }
    
    请任何人提供我如何将src.data存储到文本文件的输入。 或者,如果有人能指导我将其转换为纯C函数,那就太好了,我的意思是不应该使用opencv调用。 我正在尝试将其移植到ARM处理器上,这就是我尝试转换为C函数的基本原因

    找到解决方案:

    char* fpath = "C:/Users/uids8702/Desktop/LDC_ImageWarping_v1.0/test.bmp";
        for (;;) {
            Mat src;
            src = imread(fpath, 0);
            if (!src.data)
            {
                while (1);
            }
    update_src(src.data);
    
    在函数定义中:

    update_src(uint8_t* srcdata)
    {
        FILE* fpath = fopen("C:/Users/uids8702/Desktop/LDC_ImageWarping_v1.0/dst_data.txt", "w");
        if (fpath == NULL)
        {
            printf("Error opening file\n");
            exit(1);
        }
        static int32_t t = 0, u = 0;
        for (t = 0; t < dstHeight; t++)
        {
            printf("In main loop\n");
            for (u = 0; u < dstWidth; u++)
            {
                printf("dst data is %d\n", *(dstData));
                fprintf(fpath, "%d,", *(dstData));
                dstData++;
            }
    
        }
    }
    
    update\u src(uint8\u t*srcdata)
    {
    文件*fpath=fopen(“C:/Users/uids8702/Desktop/LDC_ImageWarping_v1.0/dst_data.txt”,“w”);
    如果(fpath==NULL)
    {
    printf(“打开文件时出错”);
    出口(1);
    }
    静态int32_t t=0,u=0;
    对于(t=0;t

    特别感谢@Mark提出的好主意。

    考虑像这里这样编写一个NetPBM可移植的Greymap文件-它非常简单,可以轻松地制作回BMP或PNG文件@Mark我尝试了上面的代码,但它只在缓冲区中给我1279值。实际上,我需要将源图像数据放入缓冲区,然后复制到本地文件。下面的代码是我尝试的代码:int main(){file*imageFile;int x,y,pixel,height=800,width=1280;imageFile=fopen(“test.bmp”,“wb”);if(imageFile==NULL){exit(exit_FAILURE)}fprintf(imageFile,“P5\n”);//P5文件类型fprintf(imageFile,“%d%d\n”,宽度,高度);//尺寸fprintf(imageFile,“1280\n”);//的最大像素(x=0;XUGH!请不要在注释区域中添加代码——这是很难阅读的)!在你的问题下点击“代码>编辑< /代码>并更新问题。为什么你写代码< 1280?/CUT>作为最大像素亮度?如果你的数据是代码>无符号char < /代码>,你应该写<代码> 255 <代码>。考虑编写一个NETPBM可移植的GRYMAP FI。像这里一样-这真的很容易,可以很容易地制作成BMP或PNG文件…@Mark我尝试了上面的代码,但它在缓冲区中只给了我1279值。我实际上需要将源图像数据放入缓冲区,然后我将复制到本地文件。下面的代码是我尝试的:int main(){FILE*imageFile;int x,y,pixel,height=800,width=1280;imageFile=fopen(“test.bmp”,“wb”);if(imageFile==NULL){exit(exit_FAILURE);}fprintf(imageFile,“P5\n”);//P5文件类型fprintf(imageFile,“%d%d\n”,width,height);//尺寸fprintf(imageFile,“1280\n”);//最大像素(x=0;xUgh!请不要将代码放在评论区-这很难阅读!而是单击问题下方的
    edit
    并更新问题。为什么要将
    1280
    作为最大像素亮度?如果数据是
    无符号字符
    ,则应写入
    255