opencv操作raw文件

python版:




import numpy as np
import cv2
height=480
width=640
channels=3
# img = cv2.imread('data/04/04(1).bmp')
# # 这里需要我们在当前目录下放一张名为cat.jpg的文件
# img.tofile('04(1).raw')
# #利用numpy中array的函数tofile将数据写入文件
# #这时我们发现当前目录下新增了一个文件,名为cat.raw
# # 我们先确定原图片的数据格式和大小,通道数,否者无法进行下一步转换
# type = img.dtype#得到数据格式,如uint8和uint16等
# height,width, channels = img.shape# 得到图像大小和通道数
# 利用numpydefromfile函数读取raw文件,并指定数据格式
imgData = np.fromfile(r'C:\Users\Administrator\Documents\tmp\ceshia\ceshia\1648629378140_0.7237443_rgb.raw', dtype=np.uint8)
# 利用numpy中array的reshape函数将读取到的数据进行重新排列。
imgData = imgData.reshape(height,width,channels)

imgData=cv2.cvtColor(imgData,cv2.COLOR_BGR2RGB)
to_dir=r'C:\Users\Administrator\Documents\tmp\ceshia\ceshia'

cv2.imwrite(to_dir+"jia.jpg",imgData)
# 展示图像
cv2.imshow('img',imgData)
# 注意到这个函数只能显示uint8类型的数据,如果是uint16的数据请先转成uint8。否则图片显示会出现问题。**
cv2.waitKey()

c++版:

#include<iostream>
#include<opencv2/opencv.hpp>
#include<fstream>
using namespace std;
using namespace cv;

int main()
{
    // open raw data
    const std::string file_path = "D:/E_Dragon/OPENCV/testpictures/1.raw";
    std::ifstream fin;
    // 注意,这里要指定binary读取模式
    fin.open(file_path, std::ios::binary);
    if (!fin) {
        std::cerr << "open failed: " << file_path << std::endl;
    }
    // seek函数会把标记移动到输入流的结尾
    fin.seekg(0, fin.end);
    // tell会告知整个输入流(从开头到标记)的字节数量
    int length = fin.tellg();
    // 再把标记移动到流的开始位置
    fin.seekg(0, fin.beg);
    std::cout << "file length: " << length << std::endl;

    // load buffer
    char* buffer = new char[length];
    // read函数读取(拷贝)流中的length各字节到buffer
    fin.read(buffer, length);

    // construct opencv mat and show image
    cv::Mat image(cv::Size(720, 540), CV_8UC1, buffer);
    cv::imshow("test", image);
    cv::waitKey();
}


原文链接:https://blog.csdn.net/weixin_51229250/article/details/119789057

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 如果您想使用OpenCV保存RAW图像,可以使用以下代码: ```cpp cv::Mat image; // 假设您已经将RAW图像读入到这个Mat对象中了 std::string filename = "raw_image.raw"; // 保存的文件名 FILE* f = fopen(filename.c_str(), "wb"); // 以二进制写模式打开文件 fwrite(image.data, 1, image.total(), f); // 将Mat对象中的像素数据写入文件 fclose(f); // 关闭文件 ``` 请注意,这段代码假设您已经正确地将RAW图像读入到OpenCV的Mat对象中了。另外,请确保您的RAW图像的格式(如像素的位深度、宽度和高度等)与您的Mat对象匹配。 ### 回答2: 要使用OpenCV保存raw文件,可以按照以下步骤进行操作: 1. 导入OpenCV库: ```python import cv2 ``` 2. 读取原始图像: ```python img = cv2.imread('input_image.raw', cv2.IMREAD_GRAYSCALE) ``` 3. 检查图像是否成功读取: ```python if img is None: print("无法读取原始图像") exit() ``` 4. 保存图像为raw文件: ```python with open('output_image.raw', 'wb') as f: f.write(img.tobytes()) ``` 5. 检查是否成功保存: ```python if os.path.exists('output_image.raw'): print("成功保存raw文件") else: print("保存raw文件失败") ``` 这些步骤将会读取名为"input_image.raw"的raw文件,并将其保存为名为"output_image.raw"的raw文件。请确保原始图像的格式和路径正确,并保证程序有权限创建和写入文件。 ### 回答3: OpenCV可以通过以下步骤将图像保存成raw格式。 首先,我们需要获取图像的像素数据。可以使用OpenCV的imread函数读取图像,并使用imdecode函数将图像解码为Mat对象。然后,可以使用Mat对象的data成员变量获取像素数据的指针。像素数据存储在一个一维数组中,每个像素通常由三个或四个字节表示。 接下来,我们需要创建一个文件并将像素数据写入到文件中。可以使用C++的fstream库来完成文件的创建和写入操作。首先,使用ofstream对象创建一个输出文件流并打开文件。然后,可以使用流的write函数将像素数据写入到文件中。写入的字节数应该是像素个数乘以每个像素的字节数。 最后,记得关闭文件流并释放内存,以避免资源泄漏。可以使用ofstream对象的close函数关闭文件流。此外,如果有动态分配的内存,需要使用delete或者release函数释放内存。 综上所述,通过以上步骤,我们可以使用OpenCV将图像保存成raw格式。希望以上回答对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值