// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
// opencv一些重要的类的学习
int main()
{
// 点类
Point pt;
pt.x = 10;
pt.y = 30;
cout << pt << endl; // 可以直接输出
// 矩形类
Rect rect(10, 20, 10, 10); // 起始点 + 长宽
cout << rect << endl;
// Scalar 像素点 BGR格式
Scalar scalar(0, 255, 0);
// 区域类 Size
Size mysize(100, 400);
cout << mysize << endl;
// Mat类
Mat img; // 无初始化的赋值
Mat img1(200, 100, CV_8UC1); // 200 * 100 单通道8位 无初始化值
imshow("img1", img1);
Mat img2(Size(200, 100), CV_8UC1); // 100 * 200 单通道8位 无初始化值
imshow("img2", img2);
/* 要注意Size是宽 * 高 以上的两种的效果是相反的*/
Mat img3(200, 100, CV_8UC3); // 200 * 100 3通道8位 无初始化值
imshow("img3", img3);
Mat img4(200, 100, CV_8UC3, Scalar(0, 255, 0)); // 200 * 100 3通道8位 绿色
imshow("img4", img4);
// 单通道的情况下scalar赋值一个就行。 赋三个值取第一个
Mat img5(Size(200, 100), CV_8UC1, Scalar(0)); // 100 * 200 单通道8位 黑色
imshow("img5", img5);
// Mat的拷贝
Mat src = imread("..\\..\\bin\\test.jpg");
if (src.empty() == true) {
cout << "读取失败" << endl;
waitKey(0);
return -2;
}
Mat copy1 = src; // ①
Mat copy2(src); // ②
// 其中①②都是指向原图像
Mat copy3;
src.copyTo(copy3); // ③
Mat copy4 = src.clone(); // ④
// 其中③和④则是拷贝到新的内存区域
cvtColor(src, src, COLOR_BGR2HSV);
imshow("src", src);
imshow("copy1", copy1);
imshow("copy2", copy2);
imshow("copy3", copy3);
imshow("copy4", copy4);
waitKey(0);
return 0;
}