opencv学习(一)
图像创建
-
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;
}