opencv基础知识学习 -- 代码练习三

------------恢复内容开始------------

// 图像像素值统计
void CV120201012Dlg::pixel_statistic()
{
    Mat m = imread("E:\\壁纸\\周震南\\微信图片_20200610160556.jpg");
    if (m.empty())
    {
        MessageBox(_T("图像加载失败!"), _T("error"));
        return;
    }
 
    // 获取图像每个通道像素的最大值和最小值以及位置点
    // 将图像分离成3个单通道
    std::vector<Mat> img;
    split(m, img);
    double min, max;
    Point minLoc, maxLoc;
    for (int i = 0;i < img.size();i++)
    {
        // 获取
        minMaxLoc(img[i],&min,&max,&minLoc,&maxLoc,Mat());
    }
    // 获取图像像素的平均值和方差
    Mat mean, stddev;
    meanStdDev(m,mean,stddev,Mat());
}
// 图像几何形状绘制
void CV120201012Dlg::drawDemo()
{
    Mat m = imread("E:\\壁纸\\周震南\\微信图片_20200610160556.jpg");
    if (m.empty())
    {
        MessageBox(_T("图像加载失败!"), _T("error"));
        return;
    }
 
    // 在图像上绘制矩形
    Rect rec;
    rec.x = 100;  // 横坐标
    rec.y = 100;  // 纵坐标
    rec.width = 50;  // 宽 50
    rec.height = 50;   // 高 50
    rectangle(m,rec,Scalar(0,255,255),-1,8,0);
 
    // 绘制圆形
    Point p;  // 圆心坐标
    p.x = 120;
    p.y = 120;
    circle(m,p,3,Scalar(255,255,0),-1,8,0);
    //绘制 线
    Point p1, p2; // 起点和终点
    p1.x = 50;
    p1.y = 50;
    p2.x = 100;
    p2.y = 100;
    line(m,p1,p2,Scalar(34,45,100),4,LINE_AA,0);
 
    // 绘制椭圆形
    //RotatedRect rr;
    //rr.center.x = 100.0;
    //rr.center.y = 100.0;
    //rr.size = Size(30, 50);
    //rr.angle = 45;
    //ellipse(m,rr,Scalar(90,90,90),-1,8);
 
    // 定义一张黑图,将两张图像进行合并
    Mat img = Mat::zeros(m.size(),m.type());
    img = Scalar(255,255,255);
    Mat dst;
    addWeighted(m,0.7,img,0.3,0,dst);
 
    imshow("绘制图像",dst);
 
}
// 随机图像绘制
void CV120201012Dlg::randomDraw()
{
    // 定义一张背景板
    Mat img = Mat(Size(300,300), CV_8UC3);
    img = Scalar(0, 0, 0);
    // 定义随机数
    RNG randomnum(12345);
    while (1)
    {
        int key = waitKey(10);
        if (key == 27)
            break;
        int x = randomnum.uniform(0,300);   //左上点的横坐标
        int y = randomnum.uniform(0, 300);   //右上点的纵坐标
        int w = randomnum.uniform(0, 300); //左下点的横坐标
        int h = randomnum.uniform(0, 300);  //右下点的纵坐标
 
        int b = randomnum.uniform(0, 255);  // 3 个颜色值
        int g = randomnum.uniform(0, 255);
        int r = randomnum.uniform(0, 255);
 
        // 画线
        line(img,Point(x,y),Point(w,h),Scalar(b, g, r),1,LINE_AA,0);
 
        //显示
        imshow("随机图像",img);
    }
 
}
// 绘制多边形
void CV120201012Dlg::mutiplyDraw()
{
    // 定义一张背景板
    Mat img = Mat(Size(800, 800), CV_8UC3);
    img = Scalar(0, 0, 0);
 
    // 定义5个顶点坐标
    Point p1(439, 126);
    Point p2(466, 198);
    Point p3(546, 198);
    Point p4(482, 244);
    Point p5(507, 316);
    Point p6(439, 275);
    Point p7(371,316);
    Point p8(396,244);
    Point p9(330, 198);
    Point p10(414, 198);
    // 将5个坐标放入一个容器中
    std::vector<Point> vecp;
    vecp.push_back(p1);
    vecp.push_back(p2);
    vecp.push_back(p3);
    vecp.push_back(p4);
    vecp.push_back(p5);
    fillPoly(img,vecp,Scalar(255,0,0),8,0);
    polylines(img,vecp,true,Scalar(0,0,255),2,LINE_AA,0);
    std::vector<std::vector<Point>> contours;
    contours.push_back(vecp);
    //drawContours(img, contours, -1,Scalar(0,255,0),-1);
 
    imshow("多边形绘制",img);
}

------------恢复内容结束------------

posted @ 2020-10-21 22:48  南南子  阅读(134)  评论(0)    收藏  举报