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

it2025-05-27  11

// 图像像素值统计 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); }

涉及到的 opencv函数详解,参见https://blog.csdn.net/L946494/article/details/109211790

最新回复(0)