也是学习的一天!!!!
01.实现vs2015 opencv绘制椭圆和圆
记录学习的过程。
最终的结果展示如下:
具体步骤:
(1)打开VS——文件——新建——项目——Visual C++——空项目——修改名称和位置——点击确定
(2)修改这两个地方,我刚开始只修改了x64,在debug下编写时一直报错
(3)右键点击创建好的项目——选择最下方的属性
1)先点击VC++目录——包含目录——点击右侧的路径,会出现一个下拉的小箭头,如图1所示。——点击下拉按钮——点击编辑——按照图2方式将你自己的OPENCV下的include文件导入进来(我这里的包含目录和库目录分别是图3和图4所示)。
图1
图2
图3
图4
2)点击连接器——点击输入——附加依赖项——加入opencv_world460.lib,然后点击确定就可以添加文件编写代码了
修改了的位置分别为下图中的(1)和(2)两处。
注意这个附加连接器是对应的debug/release模式的
opencv_world460d.lib 对应 <debug模式>
opencv_world460.lib 对应 <release模式>
右键点击源文件——>添加——>新建项
点击Visual C++——>C++文件——>修改名称和位置——添加
一切就绪,可以编写代码啦~~~
绘制圆和椭圆的代码如下,具体每句代码大概意思也注释了,当然也可以使得代码更简洁,结合自身需求可以优化或者简化。
具体的代码如下:
#include <iostream> //输入流
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp> //绘制形状
#define W 400;
using namespace std; //命名空间,便于简写
using namespace cv; //命名空间
//定义一个绘制椭圆的函数
void MyEllipse(Mat img, double angle)
{
int nWidth = img.cols; //定义宽度为图像的列宽
int nHeight = img.rows; //定义宽度为图像的行高
int thickness = 2; //厚度,椭圆边界线的粗细 -1将通过指定的颜色填充椭圆形状
int LineType = 4; //线的类型 共有三种 LINE_4、LINE_8、LINE_AA
ellipse(img, Point(nWidth / 2, nHeight / 2), Size(nWidth / 4, nWidth / 16), angle, 0, 360, Scalar(255, 0, 0), thickness, LineType);
/*
椭圆参数说明:img图像:要在其上绘制椭圆的图像
Point(nWidth / 2, nHeight / 2) 椭圆中心的坐标
Size(nWidth / 4, nWidth / 16) 椭圆的长轴长和短轴长 长轴是整个图的四分之一,短轴是整个图像的十六分之一
angle:角度
0:椭圆弧的起始角度
360:椭圆弧的终止角度
Scalar:椭圆边界线的颜色 BGR 蓝色(255,0,0)
thickness ://厚度,椭圆边界线的粗细 -1将通过指定的颜色填充椭圆形状
LineType :线的类型 共有三种 LINE_4、LINE_8、LINE_AA
*/
}
//定义一个绘制圆的函数
void MyCircle(Mat img, Point center)
{
int nWidth = img.cols;
int nHeight = img.rows;
int thickness = -1; //封闭曲线,则填充图形
int LineType = 4;
circle(img, center, nWidth /32, Scalar(255,0,0), thickness, LineType); //绘制圆
/*圆的参数说明:img:要在img上绘制圆的图像
center:圆的中心点
nWidth /32:圆的半径
Scalar:椭圆边界线的颜色 BGR 蓝色(255,0,0)
thickness ://厚度,椭圆边界线的粗细 -1将通过指定的颜色填充椭圆形状
LineType :线的类型 共有三种 LINE_4、LINE_8、LINE_AA
*/
}
int main()
{
char opencvPC_window[] = "MyOpencv1"; //创建窗口的标题为MyOpencv
Mat opencvPC_image = Mat::zeros(400, 400, CV_8UC3); //创建图片
//绘制四个椭圆,角度分别为0, 45, 90,-45
MyEllipse(opencvPC_image, 0);
MyEllipse(opencvPC_image, 30);
MyEllipse(opencvPC_image, 60);
MyEllipse(opencvPC_image, 90);
MyEllipse(opencvPC_image, -30);
MyEllipse(opencvPC_image, -60);
int nWidth = opencvPC_image.cols; //定义宽度是图片的宽度
//绘制圆
MyCircle(opencvPC_image, Point(nWidth / 2, nWidth / 2)); //绘制圆 圆心为图片的中心位置,实心圆
imshow(opencvPC_window, opencvPC_image); //显示img的标题以及图片
imwrite("C:\\Users\\Administrator\\Pictures\\MyOpencv1.jpg", opencvPC_image); //将图片放置在某个图片文件夹下(我的是直接放在了桌面的图片文件夹下的)。
waitKey(0);
return 0;
}
总结
一步一步慢慢实现,有问题随时查找原因,并总结,要学会找出现问题的原因,注意配置环境变量,所有的实现都是在VS2017、opencv等的环境配置好,且没有出现错误的情况下执行的。
目前还是菜鸟,慢慢改进吧!
网上有很多可以参考的,大概罗列一两个,有需要可以搜索:
参考1(https://blog.csdn.net/weixin_44347020/article/details/125158544)
参考2(https://zhuanlan.zhihu.com/p/475286558)
参考3(https://blog.csdn.net/youcans/article/details/125459696)
看了无数篇别人的,第一次将自己学到的记录下来。