OpenCV 绘制同心圆的示例代码
作者:翟天保Steven 发布时间:2021-05-19 16:49:40
标签:OpenCV,同心圆
最近在学习OpenCV,本文主要介绍了OpenCV 绘制同心圆的示例代码,分享给大家,具体如下:
功能函数
// 绘制同心圆
void DrawConcentricCircle(cv::Mat mask, const cv::Point2i ¢er, int radius1,int radius2, const cv::Scalar &color, int thickness,int linetype)
{
// 创建画布
cv::Mat canvas = cv::Mat::zeros(mask.size(), CV_8UC1);
// 计算内径和外径
int inradius = min(radius1, radius2);
int outradius = max(radius1, radius2);
// 分情况讨论
// 当thickness大于0时,绘制的是两个圆型线条组成的同心圆,不需填充
if (thickness > 0)
{
cv::circle(mask, center, outradius, color, thickness, linetype);
cv::circle(mask, center, inradius, color, thickness, linetype);
}
// 当thickness小于0,一般为-1,绘制的是填充同心圆,内圆不能有填充色
else {
cv::circle(canvas, center, outradius, cv::Scalar(255), -1, linetype);
cv::circle(canvas, center, inradius, cv::Scalar(0), -1, linetype);
int row = mask.rows;
int col = mask.cols;
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
uchar *m = canvas.ptr<uchar>(i);
if (m[j] == 255)
{
mask.at<Vec3b>(i, j)[0] = static_cast<uchar>(color[0]);
mask.at<Vec3b>(i, j)[1] = static_cast<uchar>(color[1]);
mask.at<Vec3b>(i, j)[2] = static_cast<uchar>(color[2]);
}
}
}
}
}
测试代码
#include <iostream>
#include <opencv2/opencv.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
void DrawConcentricCircle(cv::Mat mask, const cv::Point2i ¢er, int radius1, int radius2, const cv::Scalar &color, int thickness, int linetype);
int main()
{
cv::Mat src = imread("test.jpg");
cv::Mat result = src.clone();
DrawConcentricCircle(result, cv::Point(result.cols / 2, result.rows / 2), 300, 500, cv::Scalar(255, 255, 0),-10, 16);
imshow("original", src);
imshow("result", result);
waitKey(0);
system("pause");
return 0;
}
// 绘制同心圆
void DrawConcentricCircle(cv::Mat mask, const cv::Point2i ¢er, int radius1,int radius2, const cv::Scalar &color, int thickness,int linetype)
{
// 创建画布
cv::Mat canvas = cv::Mat::zeros(mask.size(), CV_8UC1);
// 计算内径和外径
int inradius = min(radius1, radius2);
int outradius = max(radius1, radius2);
// 分情况讨论
// 当thickness大于0时,绘制的是两个圆型线条组成的同心圆,不需填充
if (thickness > 0)
{
cv::circle(mask, center, outradius, color, thickness, linetype);
cv::circle(mask, center, inradius, color, thickness, linetype);
}
// 当thickness小于0,一般为-1,绘制的是填充同心圆,内圆不能有填充色
else {
cv::circle(canvas, center, outradius, cv::Scalar(255), -1, linetype);
cv::circle(canvas, center, inradius, cv::Scalar(0), -1, linetype);
int row = mask.rows;
int col = mask.cols;
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
uchar *m = canvas.ptr<uchar>(i);
if (m[j] == 255)
{
mask.at<Vec3b>(i, j)[0] = static_cast<uchar>(color[0]);
mask.at<Vec3b>(i, j)[1] = static_cast<uchar>(color[1]);
mask.at<Vec3b>(i, j)[2] = static_cast<uchar>(color[2]);
}
}
}
}
}
测试效果
图1 原图
图2 绘制同心圆
绘制同心圆就是两个圆组合,但又不完全是,因为要考虑填充的情况,同心圆填充后应该是两个圆之间的区域填充,而不是填充为一整个圆,如图3所示。
图3 填充效果
来源:https://blog.csdn.net/zhaitianbao/article/details/119998926


猜你喜欢
- 背景本文总结pytest的测试用例参数化。说明软件测试中,输入相应值,检查期望值,是常见测试方法。在自动化测试中,一个测试用例对应一个测试点
- 本文实例讲述了Python HTML解析模块HTMLParser用法。分享给大家供大家参考,具体如下:简介先简略介绍一下。实际上,HTMLP
- 一 简介python-mysql-replication 是基于python实现的 MySQL复制协议工具,我们可以用它来解析binlog
- 效果图:css:<style type="text/css"> /* 带复选框的下拉框 */ ul li{
- 1.from_unixtime的语法及用法(1)语法:from_unixtime(timestamp ,date_format)即from_
- PHP str_split() 函数实例把字符串 "Hello" 分割到数组中:<?php print_r(str
- 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。from math
- 1 读/写文件NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式1、二进制的文件读写save函数是以二进制的格式保存数
- 1.问题及解决办法(1)问题:由于存储的时间戳是时间戳为GMT(格林尼治标准时间),以秒储存,但由于需要获取的是北京时间,存在时区问题。如何
- Pandas类似R语言中的数据框(DataFrame),Pandas基于Numpy,但是对于数据框结构的处理比Numpy要来的容易。1. P
- 微信网页授权认证根据微信官方文档,网页授权需要四个步骤, - 用户同意授权-获取code - 通过code 获取网页授权access_tok
- pycharm右键新建时会有目录(文件夹)和python package两个选项,这两个到底有什么不同呢1.原来在python模块的每一个包
- 前言相信大家初入某个项目,一般都要看代码。有时候,想把代码文件打印下来看,不过一般代码文件数量都在两位数或更多,逐一打开、打印,确实太耗费精
- hello.html 文件代码如下:HelloWorld/templates/hello.html 文件代码:<h1>{{ he
- 本文实例为大家分享了JavaScript实现简单计算器的具体代码,供大家参考,具体内容如下代码:<!DOCTYPE html>&
- hash//从井号 (#) 开始的 URL(锚)host//主机名和当前 URL 的端口号hostname//当前 URL 的主机名href
- Python lxml安装失败针对windows系统LXML安装失败而且pip升级也失败解决方案原因可能是pip没有安装到python我们需
- 1.过滤器的使用1.过滤器和测试器在Python中,如果需要对某个变量进行处理,我们可以通过函数来实现。在模板中,我们则是通过过滤器来实现的
- 在Mac OS上安装redis首先是安装,它会默认安装到/usr/local/bin下cd /tmpwget http://redis.go
- 如下所示:def is_chinese(uchar): """判断一个unicode是否是汉字"&q