ubuntu几种编译opencv方式
CMake与Make最简单直接的区别
图像数据类型
CV_[bit][U/S/F]C[channels]
bit:位数
U|S|F:无符号整形|有符号整形|float 浮点类型
C:图像通道数,1通道为灰度 2通道为RGB555和RGB565 3通道 彩色RGB 4通道:RGBA RGB加上alpha(透明度)
数据类型 | 字节 | 名称 | 范围 |
---|---|---|---|
8U | 8 | CV_8UC1/CV_8UC2/CV_8UC3/CV_8UC4 | 0-255 |
8S | 8 | CV_8SC1/CV_8SC2/CV_8UC3/CV_8SC4 | -128-127 |
16U | 16 | CV_16UC1/CV_16UC2/CV_16UC3/CV_16UC4 | 0-65535 |
16S | 16 | CV_16SC1/CV_16SC2/CV_16SC3/CV_16SC3 | -32768-32767 |
32U | 32 | CV_32UC1/CV_32UC2/CV_32UC3/CV_32UC4 | 0-( 2 32 2^{32} 232-1) |
32S | 32 | CV_32SC1/CV_32SC2/CV_32SC3/CV_32SC4 | 2 − 16 2^{-16} 2−16-( 2 16 2^{16} 216-1) |
32F | 32 | CV_32FC1/CV_32FC2/CV_32FC3/CV_32FC4 | 1.18 ∗ 1 0 − 308 − 3.40 ∗ 1 0 308 1.18*10^{-308}-3.40*10^{308} 1.18∗10−308−3.40∗10308 |
64F | 32 | CV_64FC1/CV_64FC2/CV_64FC3/CV_64FC4 | 2.23 ∗ 1 0 − 308 − 1.79 ∗ 1 0 308 2.23*10^{-308}-1.79*10^{308} 2.23∗10−308−1.79∗10308 |
1 Mat类
创建5种方法
(1)使用构造函数
cv::Mat M1(3,3,CV_8UC4,cv::Scalar(0,1,0,255));
std::cout << "M1" << std::endl<<M1<<std::endl;
输出
M=
[ 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255;
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255;
0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255]
(2) 通过数组初始化
int sz[2]={3,3};
int data[3][3]={1,2,3,4,5,6,7,8,9};
cv::Mat b(2,sz,CV_8UC4,data);
//通过数组转换时:一个数组元素对应一个像素的4个通道值,即将数组中的1转化为1,0,0,0,且不受图像类型影响,也就是说类型CV_8UC3时,1也对对应1,0,0,0,所以使用数组初始化请使用CV_**C4
输出
M=
[ 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0;
4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0;
7, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0]
(3) 通过create函数
cv::Mat c;
c.create(4,4,CV_8UC(1));
输出
[ 0, 0, 0, 0;
0, 0, 0, 0;
0, 0, 0, 0;
0, 0, 0, 0]
(4) 自定义Mat
cv::Mat d=(cv::Mat_<double>(3,3)<< 0,-1,0,-1,0,0,0,0,1);
输出
M=
[0, -1, 0;
-1, 0, 0;
0, 0, 1]
(5) 赋值
cv::Mat e1=d.row(0).clone();//拷贝
cv::Mat e2=cv::Mat::eye(3,3,CV_64F);//斜对角阵
cv::Mat e3=cv::Mat::ones(3,3,CV_64F);//单位矩阵
cv::Mat e4=cv::Mat::zeros(3,3,CV_64F);//零矩阵
std::cout << "e1="<<std::endl<<e1<<std::endl;
std::cout << "e2="<<std::endl<<e2<<std::endl;
std::cout << "e3="<<std::endl<<e3<<std::endl;
std::cout << "e4="<<std::endl<<e4<<std::endl;
输出
e1=
[0, -1, 0]
e2=
[1, 0, 0;
0, 1, 0;
0, 0, 1]
e3=
[1, 1, 1;
1, 1, 1;
1, 1, 1]
e4=
[0, 0, 0;
0, 0, 0;
0, 0, 0]