任務:用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