VS+opencv之装载、显示和存储图像

首先头文件:

#include
#include
#include
using namespace std;
using namespace cv;

1. 显示图像

    cv::Mat image;//创建一个空图像
    std::cout << "This image is "
                << image.rows << "x" << image.cols << std::endl;//通过size属性验证尺寸0x0
    image = cv::imread("1.jpg");//读取输入的图像
    if (image.empty()) {
        std::cout << "erro!" << endl;//如果图像无效,则弹出提示
    }
    cv::namedWindow("Original Image");//定义窗口
    cv::imshow("Oraginal Image", image);//显示图像
    cv::waitKey(0);//永远等待,如果是正数则单位是毫秒

2.图像翻转

    cv::Mat result;//创建另一个空图像,但好像不能同时创建两个,否则会报错
    cv::flip(image, result, 1);//正数表示水平,0表示垂直,负数表示水平和垂直
    cv::namedWindow("Output Image");//输出窗口
    cv::imshow("Output Image", result);
    cv::waitKey(0);//0为永远等待,正数为毫秒
    cv::imwrite("Output.jpg", result);//保存结果

    我遇到的问题:书上说可以保存到磁盘,可是我保存不了

3.灰度图像、通道数、就地处理

    image = cv::imread("1.jpg", cv::IMREAD_GRAYSCALE);//读取一个图像并转换为灰度图像
    //image = cv::imread("1.jpg", cv::IMREAD_COLOR);//读取图像并转换为三通道彩色图像
    cv::namedWindow("Grey Image");//定义窗口
    cv::imshow("Grey Image", image);//显示图像
    cv::waitKey(0);
    //如果要在读入图像时采用文件本身的格式,只需把第二个参数设置为负数
    std::cout << "This image has "
              << image.channels() << "channel(s)";//可用此方法检查图像通道数

    cv::flip(image, image, 1);//就地处理
    cv::namedWindow("Grey Image");//定义窗口
    cv::imshow("Grey Image", image);//显示图像
    cv::waitKey(0);

4.图像点击

    cv::Mat image;
    image = cv::imread("1.jpg");
    void onMouse(int event, int x, int y, int flags, void* param);
    //event:出发回调函数事件类型 x,y:鼠标的位置(像素坐标) flags:按下鼠标的哪个键 param:指向任意对象的指针
    int event=0;
    int x=0;
    int y=0;
    int flags=0;
    void* param=NULL;
    cv::namedWindow("Original Image");//定义窗口
    cv::imshow("Oraginal Image", image);//显示图像
    cv::setMouseCallback("Original Image", onMouse,//onMouse与original image建立关联,把图像地址传给函数
                         reinterpret_cast(&image));
    cv::waitKey(0);//永远等待
    onMouse(event, x,  y, flags, param);

//函数
    void onMouse(int event, int x, int y, int flags, void* param) {
    cv::Mat* im = reinterpret_cast(param);//获取(x,y)的像素值
    switch (event) {//调度事件
        //鼠标事件的回调函数可能收到的事件还有 cv::EVENT_MOUSEMOVE、cv::EVENT_LBUTTONUP、cv::EVENT_RBUTTONDOWN 和 cv::EVENT_RBUTTONUP。
    case cv::EVENT_LBUTTONDOWN://鼠标左键按下事件
        //显示像素值(x,y)
        std::cout << "at(" << x << "," << y << ")value is:"
            << static_cast(
                im->at(cv::Point(x, y))) << std::endl;
        break;
    }

    遇到的问题:为什么出现了两个窗口,只能点击一个空的 PS:通过百度,发现应该是把配置中的链接器输入中的一个没有d的lib文件删掉,但是并没有什么用

5.图像绘画 添加头文件#include

//基本的形状绘制函数有circle、ellipse、line 和 rectangle。
    cv::Mat image;
    image = cv::imread("1.jpg");
    cv::circle(image,               //目标图像
               cv::Point(155, 110), //中心点坐标
               65,                  //半径
               0,                   //颜色(black)
               3);                  //厚度
    cv::putText(image,
                "Hair and sky.",        //目标图像
                cv::Point(40, 200),     //文本
                cv::FONT_HERSHEY_PLAIN, //文本位置
                2.0,                    //字体类型
                255,                    //字体颜色(white)
                2);                     //文本厚度
    cv::namedWindow("Original Image");//定义窗口
    cv::imshow("Oraginal Image", image);//显示图像
    waitKey(0);

你可能感兴趣的:(opencv入门,c++,visual,studio,opencv)