OPENCV-3 学习笔记
OPENCV-3 學習筆記
imread()讀入圖,第一個參數,const string&類型的filename,填我們需要載入的圖片路徑名,?第二個參數,int類型的flags,為載入標識,它指定一個加載圖像的顏色類型。
namedWindow()用于創建一個窗口,const string&型的name,即填被用作窗口的標識符的窗口名稱,int 類型的flags?,窗口的標識。
imshow()顯示一幅圖像,第一個參數,const string&類型的winname,填需要顯示的窗口標識名稱,第二個參數,InputArray?類型的mat,填需要顯示的圖像。
imwrite()輸出圖像到文件,第一個參數,const string&類型的filename,填需要寫入的文件名就行了,帶上后綴,比如,“hehe.jpg”。第二個參數,InputArray類型的img,一般填一個Mat類型的圖像數據就行了。第三個參數,const vector&類型的params,表示為特定格式保存的參數編碼,它有默認值vector(),所以一般情況下不需要填寫。
基本數據結構
1、Mat類—基礎圖像容器
由兩個數據部分組成:矩陣頭(包含矩陣尺寸、存儲方法、存儲地址等信息)和一個指向存儲所有像素值的矩陣的指針。
Mat A,C; //創建信息頭部分 A = imread("1.jpg",CV_LOAD_IMAGE_COLOR); //為矩陣開辟內存 Mat B(A); //使用拷貝構造函數 C=A; //ROI Mat D = (A,Rect(10,10,100,100)); //使用矩形界定 Mat D = A(Range:all(),Range(1,3)); //使用行和列界定結構:
- M.data? 數據區域的指針
- M.dims? 矩陣維度
- M.sizes? 維度
- M.elemSize()? 每個元素占的字節空間大小,與元素類型相關,如CV_8U
- M.step[]? 用來計算元素地址, M.step[i] 表示所有比i大的維度所占空間大小
2、Vec—模板類,主要用于存儲數值向量
//示例 //可用來定義任意類型的向量,uchar、short、int、float、double Vec<double, 5> Vector; // 定義一個存放5個double型變量的向量 //使用[]訪問Vec向量成員 Vector[0]=10010;//支持運算類型 v1 = v2 + v3 v1 = v2 - v3 v1 = v2 * scale v1 = scale * v2 v1 = -v2 v1 += v2 v1 == v2, v1 != v2 norm(v1) (euclidean norm)3、Scalar類—從Vec類引出的模板類,是一個可存放4個元素的向量,主要用于傳遞和讀取圖像中的像素值
//定義BGR三個通道的顏色(藍色、綠色、紅色) cv::Scalar myScalar; myScalar = cv::Scalar(255,255,255); //讀取彩色圖像像素值(三通道) cv::Mat pImg = cv::imread("1.jpg", 1); //1表示以彩色圖像讀入 if (!pImg.data)return 0; int x = 100, y = 100; //定義點 cv::Scalar pixel = pImg.at<Vec3b>(x, y);//選取位置 cout << "B chanel of pixel is = " << pixel.val[0] << endl; cout << "G chanel of pixel is = " << pixel.val[1] << endl; cout << "R chanel of pixel is = " << pixel.val[2] << endl;4、Point類—用于表示2維坐標(x,y)
//定義圖像中的點 cv::Point pt = Point(10, 10); //二維空間中的點 cv::Point2d、cv::Point2d32f(指定為浮點型) //三維空間中的點 cv::Point3d //運算類型 pt1 = pt2 + pt3; pt1 = pt2 - pt3; pt1 = pt2 * a; pt1 = a * pt2; pt1 += pt2; pt1 -= pt2; pt1 *= a; double value = norm(pt); // L2 norm pt1 == pt2; pt1 != pt2;5、Size類—可表示一幅圖像或一個矩形的大小。它包含寬、高2個成員:width , height還有一個面積函數area()
//定義 cv::Size size(int w, int h);6、Rect類—用于定義2維矩形的模板類,可以用來定義圖像的ROI區域。
//定義 cv::Rect rect(x, y, width, height); //選取ROI區域 cv::Mat pImg = imread("1.jpg",1); cv::Rect rect(80,20,100,100);//(x,y)=(80,20),w=100,height=100 cv::Mat roi = cv::Mat(pImg, rect); cv::Mat pImgRect = pImg.clone(); cv::rectangle(pImgRect,rect,cv::Scalar(0,255,0),2); cv::imshow("original image with rectangle",pImgRect); cv::imshow("roi",roi); cv::waitKey();7、RotatedRect類—特殊的矩形。這個類通過中心點,寬度和高度和旋轉角度來表示一個旋轉的矩形。
/*定義 center:中心點坐標Point2f類型 size:矩形的寬度和高度,Size2f類型 angle:順時針方向的旋轉角度(單位°),float類型 */ RotatedRect(const Point2f& center, const Size2f& size, float angle); //RotatedRect cv::Point2f center(100, 100);cv::Size2f size(100, 50);float angle = 45;// try 10, 30, 45 RotatedRect rRect(center, size, angle);cv::Mat image(200, 200, CV_8UC3, cv::Scalar(0));Point2f vertices[4];rRect.points(vertices);for (int i = 0; i < 4; i++)line(image, vertices[i], vertices[(i + 1) % 4], Scalar(0, 255, 0));Rect brect = rRect.boundingRect();rectangle(image, brect, Scalar(255, 0, 0));imshow("rectangles", image);waitKey(0);8、Rang類—表示范圍
Mat m(300,300,CV32F); Mat part = m(Range::all(), Range(20, 200));總結
以上是生活随笔為你收集整理的OPENCV-3 学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OPENCV-2 学习笔记
- 下一篇: 笔记本如何与其他计算机共享,笔记本电脑怎