任务:用c++在图片上画线
之前用过python的opencv,所以直接想到了用c++的opencv来画线。
但关键就是VS中如何配置c++ opencv库的问题:
vs中opencv库的配置:https://www.cnblogs.com/linshuhe/p/5764394.html
1、创建工程:
可以创建控制台工程也可以创建空工程。
2、打开解决方案资源管理器和属性管理器
打开解决方案资源管理器:视图>>解决方案资源管理器
打开属性管理器:视图>>其他窗口>>属性管理器
3、创建c++文件
解决方案资源管理器中 source目录右键>>添加>>新建项
4、配置平台为x64
我的机器是64位的,应该用x64,而VS默认是win32,所以需要先修改一下平台:
debug>>配置管理器
活动解决方案平台>>如果有x64就选择x64,如果没有则选择新建,新建一个x64
5、配置属性管理器
配置平台为x64之后,就可以看到属性管理器里面多了debug|x64和release|x64两个文件夹
调试的时候配置debug|x64文件夹就好
右键>>属性
需要配置的一般有以下几个地方:
(1)include目录:
(2)lib目录:
这里注意,如果VS为2013版本的话,则应该使用vc12目录里的lib;如果VS为2015版本的话,则应该使用vc14目录里的lib,总之lib的版本不能高于VS的版本,否则会出错
我的VS是2013的,一开始下载了opencv-3.3.0-vc14的安装包,导致安装完成后没有vc12文件夹,强行用vc14则vs2013各种报错。于是重装了opencv-3.1.0解决了问题。
(3) 链接器input,把所用到的库文件的文件名考进去(注意不是路径名),尽量多考
(4)编译器的运行库(动态还是静态)。例如我写opencv的时候就必须用MTD,默认MDD就会出错
VS运行时库 MT MTD MD MDD区别:
https://www.cnblogs.com/ShaneZhang/p/3480502.html
(5)有时例如如果用到freopen函数,VS会报错说freopen函数危险不能用,如果非要用,也可以在这里配置一下
项目 =》属性 =》c/c++ =》预处理器=》点击预处理器定义,编辑,加入_CRT_SECURE_NO_WARNINGS,即可。
freopen函数不安全错误:https://blog.csdn.net/zhangyuehuan/article/details/12012635
c++读取文件freopen:https://blog.csdn.net/jacky_chenjp/article/details/70237418
6、写程序:opencv画直线
#include <iostream> #include <stdio.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main(){ // 读入图片 Mat img = imread("pic.png"); //配置点数 默认4个 const int pointnum = 4; double a[pointnum]; double b[pointnum]; double max = 0; int maxindex = 0; //颜色集合 int scalar_cur = 0; Scalar color[3] = {Scalar(255,0,0),Scalar(0,255,0),Scalar(0,0,255)}; //打开文件 freopen("E:\\programs\\c++\\Drawpic\\Drawpic\\pos", "r", stdin); //while (scanf("[%lf, %lf]\n", &a[i], &b[i]) != EOF){ //读入文件,并找到位置最低的点 for (int i = 0; i<pointnum;i++){ scanf("[%lf, %lf]\n", &a[i], &b[i]); if (b[i] > max){ max = b[i]; maxindex = i; } } //画线 for (int i = 0; i < pointnum; i++){ if (i == maxindex){ continue; } line(img, Point(a[maxindex], b[maxindex]), Point(a[i], b[i]), color[scalar_cur],3); //三种颜色循环使用 scalar_cur = (scalar_cur + 1) % 3; } imshow("face",img); // 等待60000 ms后窗口自动关闭 waitKey(60000); }
opencv绘制直线:https://blog.csdn.net/weixin_36340947/article/details/77095924