OpenCV——C++下的格式規范


考慮到現在網上OpenCV的教程基本都是基於C語言的,很少有針對於純C++的教程,於是買了一本書C++下的OpenCV准備學一下,規范一下編程風格,為以后做准備。這篇隨筆邊學邊寫。

1.加載圖像

新版的函數庫支持直接用Mat來讀取和操作圖像,這樣格式簡單清晰,在C++下,盡量拋棄原有的IplImage格式:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    cv::Mat image;
    image = cv::imread("D:\\112.jpg");
    if (image.empty())
    {
        cout << "No image";
    }
    else
    {
        cv::namedWindow("Original Image");
        cv::imshow("Original Image", image);
        cout << "This image is " << image.rows << "x" << image.cols << endl;
        cv::waitKey(0);
    }
    return 0;
}

重點函數: image = cv::imread("D://112.jpg",CV_LOAD_IMAGE_GRAYSCALE);//灰度圖像單通道

      image = cv::imread("D://112.jpg",CV_LOAD_IMAGE_COLOR);//彩色圖像3通道

 

可以直接加載到圖像並輸出大小:

2.圖像的翻轉

在剛剛的函數后面加入如下代碼,可以新生成一個窗口並水平翻轉圖片,並將翻轉后的圖片存入路徑內。

cv::Mat flip_image;
    cv::flip(image, flip_image, 1);//>0水平;==0垂直
    cv::namedWindow("The Flip Image");
    cv::imshow("The Flip Image", flip_image);
    cv::waitKey(0);
    cv::imwrite("D:\\112flip.jpg", flip_image);

重點函數:  cv::flip(image, flip_image, 1)  ;正數代表水平180度,0代表90度,負數代表倒轉。

 3.繪圖和文本寫入

cv::circle(image,
        cv::Point(175, 185), //圓心
        155,            //半徑
        cv::Scalar(255, 255, 0),//顏色,(0,0,0)為黑
        3);                //厚度

    cv::putText(image,
        "This is me.",        //文本內容
        cv::Point(80, 400),  //起始點
        cv::FONT_HERSHEY_PLAIN, //字體
        2.0,                // 字體大小
        cv::Scalar(255,255,0),//顏色
        2);                    //文本厚度

函數中的參數見注釋,除了畫圓,常見的還有橢圓(ellipse),線(line),矩形(rectangle)。

 

4.自定義操作區域

如要在圖片中只改變一小部分,則需要定義這片區域,如下是一個插入logo的例子:

    cv::Mat image;
    image = cv::imread("D:\\112.jpg");//載入原圖像
    cv::namedWindow("Image");        //建立窗口
    cv::Mat logo;                    
    logo = cv::imread("D:\\year.jpg");//載入logo

    cv::Mat imageROI(image,    //設定區域
        cv::Rect(image.cols - logo.cols,//圖像最右邊
                 image.rows - logo.rows,//圖像最下邊
                 logo.cols, logo.rows));//區域大小
    logo.copyTo(imageROI);                //復制logo到區域中
    cv::imshow("Image", image);
    cv::waitKey(0);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM