opencv基本使用

cmakelists:

cmake_minimum_required(VERSION 3.7)
project(useMat)

set(CMAKE_CXX_STANDARD 11)

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_DIRS})

set(SOURCE_FILES main.cpp)
add_executable(useMat ${SOURCE_FILES})
target_link_libraries(useMat ${OpenCV_LIBS})

程序:

#include <iostream>
//#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
//using namespace cv;



int main(int argc, char** argv)
{
    cv::Mat_<double> k_1(2, 2);
    k_1<<1,2,3,4;
    cout<<"k_1=\n"<<k_1<<endl;

    cv::Mat k1;
    k1=k_1;//这里证明k_1和k1是可以相互赋值的
    cout<<"k1=\n"<<k1<<endl;

    //此格式常用于矩阵各元素分别赋值,一般用在相机内参矩阵K的赋值上
    cv::Mat k2 = (cv::Mat_<double>(2, 2)<<1, 2, 3, 4);//这句在clion上会划红线提示有错误:Types 'Mat' and 'int' are not compatable。后面运行起来貌似没问题。
    cout<<"k2=\n"<<k2<<endl;

    //imwrite函数生成一张图片文件
    cv::Mat mat(48, 64, CV_8UC3);
    cv::randu(mat, cv::Scalar::all(0), cv::Scalar::all(255));
    cv::imwrite("image.png", mat);

    //读入一张图片并在窗口显示,注意这里仅是显示,而不是生成图片文件。
    cv::Mat image = cv::imread("ubuntu.png");
    cv::imshow("image", image);
    cv::waitKey(0);//这里注意,每一个imshow后面必须接一个waitKey,不然不显示窗口,有点类似于终端显示秒关

    //输出图片的各像素数值信息,这里有许多中格式,通过format()第二个参数设定,python格式看起来比较顺眼
    cout<<format(mat, cv::Formatter::FMT_PYTHON)<<endl;

    //颜色空间转换,通过cvtColor()进行,原始图,转换图,转换标示符,通过各种标识符来控制颜色输出,下方将彩色图转换成黑白图
    //通过下面的输出可以看出,通道数并没有改变,只是将RGB三个通道的值都变成一样的了,所以变成了黑白图。
    cv::Mat gray;
    cv::cvtColor(image, gray, cv::COLOR_RGB2GRAY);
    cout<<cv::format(image, cv::Formatter::FMT_PYTHON)<<endl;
    cv::imshow("黑白图像", gray);
    cv::waitKey(0);



    //~~~~~~~~~~~~~基本图形绘制~~~~~~~~~~~~~~~

    //绘制椭圆ellipse(),下为函数定义
    /*
    CV_EXPORTS_W void ellipse(InputOutputArray img, Point center, Size axes,
                              double angle, double startAngle, double endAngle,
                              const Scalar& color, int thickness = 1,
                              int lineType = LINE_8, int shift = 0);
    */
    //这里注意,单纯的cv::Mat image;是创建不出来任何图像的,所以imshow()也会报错,必须用zeros函数创建一张黑色底片,规定好大小,通道数,才能创建出一张可以显示图片。
    cv::Mat image_ellipse = cv::Mat::zeros(600, 600, CV_8UC3);
    // 各参数为:椭圆中心点位置坐标(这里是图片中的像素坐标)、
    // 绘制区域矩形的长宽(如果Size中的参数相等就是圆,不相等就是椭圆。注意Size中的参数值是指半轴长,也就是像下面设成Size(300, 300)这个圆会跟上方600*600的image一样大)、
    // 旋转角度(也就是底板矩形的旋转)、
    // 椭线开始的角度、椭线结束的角度(这两个参数是设置椭圆要不要画全,还是画一部分,定义的是从3点钟为0°,顺时针转为正,比如下面的0, 270。画出来就是G这种轮廓)、
    // 线的颜色,Scalar(255, 129, 0)为蓝色
    // 函数原型中后面还有线宽、线型等设置,但都有默认值,所以没有写。
    cv::ellipse(image_ellipse, cv::Point(300, 300), cv::Size(300, 300), 0, 0, 270, cv::Scalar(255, 129, 0));
    cv::imshow("ellipse", image_ellipse);
    cv::waitKey(0);


    //绘制圆的circle(),函数定义:
    /*
    CV_EXPORTS_W void circle(InputOutputArray img, Point center, int radius,
    const Scalar& color, int thickness = 1,
    int lineType = LINE_8, int shift = 0);
    */
    //跟上方一样,定义一张黑板底片
    cv::Mat image_circle = cv::Mat::zeros(600, 600, CV_8UC3);
    //参数:
    //要绘制的图片
    //圆中心点
    //半径
    //颜色
    //这里没有跟椭圆一样有起始点和终止点位置,也就以为着只要画了就必须是个整圆,没有缺角。也就意味着想要画缺角的圆或者椭圆必须用ellopse()函数。
    cv::circle(image_circle, cv::Point(300, 300), 300, cv::Scalar(0, 0, 255));
    cv::imshow("circle", image_circle);
    cv::waitKey(0);

    //画线line()
    //函数定义:
/*    CV_EXPORTS_W void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
                           int thickness = 1, int lineType = LINE_8, int shift = 0);*/
    //跟上方一样,定义一张黑板底片
    cv::Mat image_line = cv::Mat::zeros(600, 600, CV_8UC3);
    //参数比较简单,图像,起始点,终止点,颜色,后面的额线宽,线型等都有默认值
    cv::line(image_line, cv::Point(200, 200), cv::Point(400, 400), cv::Scalar(0, 0, 255));
    cv::imshow("line", image_line);
    cv::waitKey(0);


    //绘制矩形,函数定义:
/*    CV_EXPORTS_W void rectangle(InputOutputArray img, Point pt1, Point pt2,
                                const Scalar& color, int thickness = 1,
                                int lineType = LINE_8, int shift = 0);*/
    //跟上方一样,定义一张黑板底片
    cv::Mat image_rectangle = cv::Mat::zeros(600, 600, CV_8UC3);
    //参数:图片,左上角点,右下角点,颜色,后面的有默认值
    cv::rectangle(image_rectangle, cv::Point(100, 100), cv::Point(200, 200), cv::Scalar(0, 0, 255));
    cv::imshow("rectangle", image_rectangle);
    cv::waitKey(0);


    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值