图像创建

  • CV_8UC1 : 8位无符号单通道(灰度图)

  • CV_8UC3 : 8位无符号三通道(彩色图,BGR顺序)

  • CV_32FC1 : 32位浮点单通道(用于深度图、特征图等)

  • CV_8UC4 : 8位无符号四通道(BGRA,带Alpha通道)

#include <iostream>
#include <opencv2/opencv.hpp>

int main() {
    // 注意:100为高度,200为宽度
    // CV_8UC3:3 通道彩色图像(初始值随机)
    cv::Mat img1(100, 200, CV_8UC3);
    // 创建一张 320x240 的单通道灰度图像(初始值随机)
    cv::Mat img2(240, 320, CV_8UC1);
    // 使用 cv::Size 指定尺寸,宽800,高600
    cv::Mat img3(cv::Size(800, 600), CV_8UC3);
    // 全黑图像,所有像素为 0
    cv::Mat black = cv::Mat::zeros(480, 640, CV_8UC3);
    // 全白图像,所有像素为 255
    // 注意:ones 创建全1矩阵,乘以255得到255
    cv::Mat white1 = cv::Mat::ones(480, 640, CV_8UC3) * 255;
    cv::Mat white2(480, 640, CV_8UC3, cv::Scalar(255, 255, 255));
    // 使用cv::Scalar
    cv::Mat gray(240, 320, CV_8UC1, cv::Scalar(128));  // 所有像素灰度值 128
    return 0;
}

注意事项

  • 尺寸顺序:构造函数是 (height, width, type),而 cv::Size 是 (width, height)

  • 通道顺序:OpenCV 默认使用 BGR 顺序,不是 RGB

  • 如果只声明 cv::Mat img; 而未分配内存,不能直接使用,需要调用 create 或构造函数。

图像读取,保存

#include <iostream>
#include <opencv2/opencv.hpp>

int main() {
    // cv::IMREAD_UNCHANGED:透明通道
    cv::Mat img = cv::imread("1.png", cv::IMREAD_UNCHANGED);
    // cv::imshow不支持透明通道,透明部分显示黑色
    cv::imshow("显示图片", img);
    // cv::write支持透明通道
    cv::imwrite("2.png", img);
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}

 

标签: opencv, 图像创建, 透明通道

上一篇: nlohmann::json使用
下一篇: std::map学习

添加新评论