29 OpenCV 图像距

embedded/2024/11/15 6:00:37/

文章目录

  • 距的概念
  • API函数
  • 示例

距的概念

距的概念
在这里插入图片描述在这里插入图片描述

API函数

moments(
InputArray  array,//输入数据
bool   binaryImage=false // 是否为二值图像
)contourArea(
InputArray  contour,//输入轮廓数据
bool   oriented// 默认false、返回绝对值)arcLength(
InputArray  curve,//输入曲线数据
bool   closed// 是否是封闭曲线)

示例

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>using namespace std;
using namespace cv;Mat src, gray_src;
int threshold_value = 80;
int threshold_max = 255;
const char* output_win = "image moents demo";
RNG rng(12345);
void Demo_Moments(int, void*);
int main(int argc, char** argv) {src = imread("D:/vcprojects/images/circle.png");if (!src.data) {printf("could not load image...\n");return -1;}cvtColor(src, gray_src, CV_BGR2GRAY);GaussianBlur(gray_src, gray_src, Size(3, 3), 0, 0);char input_win[] = "input image";namedWindow(input_win, CV_WINDOW_AUTOSIZE);namedWindow(output_win, CV_WINDOW_AUTOSIZE);imshow(input_win, src);createTrackbar("Threshold Value : ", output_win, &threshold_value, threshold_max, Demo_Moments);Demo_Moments(0, 0);waitKey(0);return 0;
}void Demo_Moments(int, void*) {// 定义变量Mat canny_output; // Canny边缘检测的输出vector<vector<Point>> contours; // 图像中找到的轮廓vector<Vec4i> hierachy; // 轮廓的层级结构// 应用Canny边缘检测Canny(gray_src, canny_output, threshold_value, threshold_value * 2, 3, false);// 在二值图像中找到轮廓findContours(canny_output, contours, hierachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));// 计算轮廓的矩和质心vector<Moments> contours_moments(contours.size()); // 轮廓的矩vector<Point2f> ccs(contours.size()); // 轮廓的质心for (size_t i = 0; i < contours.size(); i++) {// 计算轮廓的矩contours_moments[i] = moments(contours[i]); // 计算质心ccs[i] = Point(static_cast<float>(contours_moments[i].m10 / contours_moments[i].m00), static_cast<float>(contours_moments[i].m01 / contours_moments[i].m00)); }// 在原始图像上绘制轮廓和质心Mat drawImg; // 用于绘制轮廓和质心的图像src.copyTo(drawImg); // 复制原始图像以进行绘制for (size_t i = 0; i < contours.size(); i++) {// 跳过小轮廓if (contours[i].size() < 100) {continue;}// 为每个轮廓生成随机颜色Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));// 打印质心坐标和轮廓属性printf("center point x : %.2f y : %.2f\n", ccs[i].x, ccs[i].y);printf("contours %d area : %.2f   arc length : %.2f\n", i, contourArea(contours[i]), arcLength(contours[i], true));// 在图像上绘制轮廓和质心drawContours(drawImg, contours, i, color, 2, 8, hierachy, 0, Point(0, 0));circle(drawImg, ccs[i], 2, color, 2, 8);}// 显示绘制了轮廓和质心的图像imshow(output_win, drawImg);return;
}

在这里插入图片描述


http://www.ppmy.cn/embedded/20250.html

相关文章

【Qt常用控件】—— 显示类控件

目录 1.1 Label 1.2 LCD Number 1.3 ProgressBar 1.4 Calendar Widget 1.5 小结 1.1 Label QLabel 控件是 Qt 中用于显示文本或图像的部件&#xff0c;是用户界面开发中常用的组件之一。 核⼼属性如下&#xff1a; 属性 说明 text QLabel 中的⽂本 textFormat ⽂本的格…

Spring Security 解决注入攻击的配置

Spring Security 本身主要是用来处理认证和授权的安全框架&#xff0c;它并不直接处理注入攻击&#xff0c;如SQL注入或者其他类型的注入攻击。注入攻击的预防主要在于如何处理和验证输入数据以及安全地使用API&#xff0c;特别是那些与数据库交互的API。不过&#xff0c;Sprin…

base64算法

1 介绍 将二进制数据编码为文本字符串的算法 理解&#xff1a;把一个能看懂的明文变成一个看不懂的密文数据统称为加密 2 使用 A 在浏览器控制台使用 加密 window.btoa(加密的数据) 解密 window.atob(MTIzNDQ) B 在VSconde中使用 加密 解密

15.接口自动化学习-Mock(挡板/测试桩)

场景&#xff1a; 新需求还未开发时&#xff0c;使用mock提早介入测试&#xff0c;等后边开发后&#xff0c;进行调试 三方接口返回效率低&#xff0c;使用mock技术走通流程 1.mock方式 &#xff08;1&#xff09;如果会写django或flask,可以写简单对应的代码 &#xff08;…

大话西游2游戏搬砖可行性分析

《大话西游2》作为一款经典的网络游戏,自推出以来便吸引了大量玩家的关注和热爱。在游戏中,玩家可以通过完成各种任务、副本和活动来获取游戏货币和道具,进而提升角色实力。同时,一些玩家也发现了通过搬砖(即通过游戏内交易获取收益)来赚取额外收入的途径。那么,大话西游…

增加VSCode的终端的显示行数

增加VSCode的终端的显示行数 VSCode的终端显示行数默认为1000 超过1000则终端最前面的内容会丢失 修改方法 找到设置&#xff1a;terminal.integrated.scrollback&#xff0c;并增加数值即可 terminal.integrated.scrollback

SecureCRT中添加命令显示为空如何处理?(原因添加了空行)

相关背景信息 配置相关路径&#xff1a; ~/Library/Application\ Support/VanDyke/SecureCRT/Config包括的配置信息 按钮、命令、全局配置、色彩、以及license都在 $ ls ButtonBarV4.ini Commands Global.ini …

【Java探索之旅】解密构造方法 对象初始化的关键一步

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、对象的构造及初始化1.1 构造方法1.2 构造方法的特性1.3 默认初始化1.4 就地初始化…