OpenCV学习(一):图片的读取显示以及鼠标点击事件的设置

个人学习OpenCV时的笔记,为方便各位网友及本人自己查阅,现做出如下记录:

直接上代码:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <iostream>

using namespace std;
using namespace cv;

// 提前声明需要调用的方法
void onMouse(int event, int x, int y, int flgs, void* param);

int main(int atgc, char *argv[]){

    cv::Mat image;  // 创建一个空图像
    std::cout << "This image is " << image.rows << " x " << image.cols << std::endl;

    image = cv::imread("E:/earth.jpg");  // 读取图像
    if (image.empty()){
        cout << "read image error!" << endl;
        return 0;
    }

    // 翻转图像的例子
    Mat flipImage;
    flip(image, flipImage, 1);  // 正数表示水平, 0表示垂直, 负数表示水平和垂直

    // 文件的读写操作
    //imwrite("E:/flipImage.jpg", flipImage);


    // 读取一个图片并且转换成灰度图像
    Mat grayImage = imread("E:/earth.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    Mat threeChannel = imread("E:/earth.jpg", CV_LOAD_IMAGE_COLOR);
    cout << "All channels :" << threeChannel.channels() << endl;

    // 在图像上画图形或者写文字
    circle(image,
        Point(122, 110),  // 圆的中心
        65, // 半径
        0,  // 颜色
        3); // 厚度

    putText(image,
        "This is a picture",
        Point(40, 40),
        cv::FONT_HERSHEY_PLAIN, // 字体类型
        2.0, // 字体大小
        255, // 字体颜色
        2 // 文本厚度
        );

    //// 图像显示
    cvNamedWindow("pic", CV_WINDOW_AUTOSIZE);
    imshow("pic", image);

    cvNamedWindow("pic1", CV_WINDOW_AUTOSIZE);
    imshow("pic1", flipImage);

    // 鼠标点击时间判别
    setMouseCallback("pic", onMouse, reinterpret_cast<void*>(&image));

    waitKey(0);

    return 0;
}

// 方法实现
void onMouse(int event, int x, int y, int flgs, void* param){
    Mat *im = reinterpret_cast<Mat*>(param);

    switch (event)
    {
    case CV_EVENT_LBUTTONDOWN: // 鼠标左键按下时间的触发回调函数
        cout <<"at (" << x << "," << y <<") value is:" << static_cast<int>(im->at<uchar>(Point(x, y))) << endl;
        break;
    }
}

参考:OpenCV计算机视觉编程攻略

猜你喜欢

转载自my.oschina.net/u/3702502/blog/1633102