Opencv读入图像,并使用FILE类将像素保存为TXT文件

//两种方法都使用FILE类,保存txt文件

//第一种方法
#include <opencv2/opencv.hpp>  //头文件

using namespace cv;  //包含cv命名空间
using namespace std;

static void saveXYZ(const char* filename, const Mat mat)
{
    const double max_z = 1.0e4;
    FILE* fp = fopen(filename, "wt");
    for (int y = 0; y < mat.rows; y++)
    {
        for (int x = 0; x < mat.cols; x++)
        {
            Vec3b point = mat.at<Vec3b>(y, x);
            //if (fabs(point[2] - max_z) < FLT_EPSILON || fabs(point[2]) > max_z) continue;
            //fprintf(fp, "%f %f %f\n", point[0], point[1], point[2]);
            fprintf(fp, "%d %d %d  \n", point[0], point[1], point[2]);
        }
    }
    fclose(fp);
}

void main(int argc, char** argv)
{
    std::string point_cloud_filename = "";
    cv::CommandLineParser parser(argc, argv,
        "{p|point_cloud.txt|}");

    // 【1】读入一张图片,载入图像
    Mat srcImage = imread("1.jpg");
    // 【2】显示载入的图片
    imshow("【原始图】", srcImage);
    point_cloud_filename = parser.get<std::string>("p");
    saveXYZ(point_cloud_filename.c_str(), srcImage);
    cout << srcImage.channels();
    // 【3】等待任意按键按下
    waitKey(0);
}

//第二种方法

#include <opencv2/opencv.hpp>  //头文件

using namespace cv;  //包含cv命名空间
using namespace std;

static void saveXYZ( Mat mat)
{
    const double max_z = 1.0e4;
    FILE* fp = fopen("point_cloud.txt", "wt");
    for (int y = 0; y < mat.rows; y++)
    {
        for (int x = 0; x < mat.cols; x++)
        {
            Vec3b point = mat.at<Vec3b>(y, x);
            //if (fabs(point[2] - max_z) < FLT_EPSILON || fabs(point[2]) > max_z) continue;
            //fprintf(fp, "%f %f %f\n", point[0], point[1], point[2]);
            fprintf(fp, "%d %d %d  \n", point[0], point[1], point[2]);
        }
    }
    fclose(fp);
}

void main(int argc, char** argv)
{

    // 【1】读入一张图片,载入图像
    Mat srcImage = imread("1.jpg");
    // 【2】显示载入的图片
    imshow("【原始图】", srcImage);
    saveXYZ( srcImage);
    cout << srcImage.channels();
    // 【3】等待任意按键按下
    waitKey(0);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值