首先头文件:
#include<opencv2/core.hpp>
 #include<opencv2/highgui.hpp>
 #include<opencv2/imgproc.hpp>
 #include<iostream>
 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<void*>(&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<cv::Mat*>(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<int>(
                 im->at<uchar>(cv::Point(x, y))) << std::endl;
         break;
     }
     //Q:为什么出现了两个窗口,只能点击一个空的 PS:通过百度,发现应该是把配置中的链接器输入中的一个没有d的lib文件删掉,但是并没有什么用
5.图像绘画
//基本的形状绘制函数有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);










