[圖文] OpenCV 3.4.1 安裝配置在 Visual Studio 2017
1. 新版的 Visual Studio 2022 + OpenCV490 可以參考新文章https://charlottehong.blogspot.com/2024/02/opencv-490-win11-visual-studio-2022.html
2. Visual Studio 2019 + OpenCV401 可以參考新文章
https://charlottehong.blogspot.com/2019/02/opencv-401-visual-studio-2019.html
https://charlottehong.blogspot.com/2019/02/opencv-401-visual-studio-2019.html
正文開始
先到官方下載這兩項軟體 (點擊有連結)
關於 Visual Studio 2017 如何安裝可以參考 https://charlottehong.blogspot.com/2018/09/c-visual-studio-2017.html
建議直接解壓縮到C槽,本文範例即直接解壓縮到C
文件說明
build文件是官方已經幫你預先編譯好的檔案,開進去
可以看到vc15 的字樣,這是給 visual studio 2017 用的。
C:\opencv\build\x64\vc15\bin
可以看到vc15 的字樣,這是給 visual studio 2017 用的。
總而言之會用到的只有
- C:\opencv\build\include
- C:\opencv\build\x64\vc15
部屬 OpenCV
首先只要做一次就好的是
- 系統環境變數加入 bin 路徑
編譯器大概需要三個步驟(每次第一次開新專案)
- 編譯器加入 include 路徑
- 編譯器加入 lib 路徑
- 編譯器加入 lib 檔案
環境變數(說明文字在圖下)
如果在設定環境變數之前就已經先打開 Visual Studio 的話,需要重新啟動 Visual Studio ,沒有重開編譯的時候會出現 “找不到**.dll檔案”
標記一下蠻常出現的錯誤
LNK1104 無法開啟檔案 'opencv_worldXXXd.lib'
這個是環境變數這個步驟做錯了
設定編譯器
再來要進入設定裡面設置,留意一下紫色的框框待會會用到
截圖截錯了,以下 紫色框框要選 x64 模式 (OpenCV 提供的預編檔案只有x64)
截圖截錯了,以下 紫色框框要選 x64 模式 (OpenCV 提供的預編檔案只有x64)
截圖截錯了,以下 紫色框框要選 x64 模式 (OpenCV 提供的預編檔案只有x64)
截圖截錯了,以下 紫色框框要選 x64 模式 (OpenCV 提供的預編檔案只有x64)
好了之後貼上測試代碼
/**********************************************************
Name :
Date : 2016/05/29
By : CharlotteHonG
Final: 2016/05/29
**********************************************************/
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char const *argv[]) {
/* 畫布 */
Mat img(270, 720, CV_8UC3, Scalar(56, 50, 38));
/* 直線 */
line(img, Point(20, 40), Point(120, 140), Scalar(255, 0, 0), 3);
/* 實心方塊 */
rectangle(img, Point(150, 40), Point(250, 140), Scalar(0, 0, 255), -1);
/* 實心圓 */
circle(img, Point(330, 90), 50, Scalar(0, 255, 0), -1);
/* 空心橢圓 */
ellipse(img, Point(460, 90), Size(60, 40), 45, 0, 360, Scalar(255, 255, 0), 2);
/* 不規則圖形 */
Point points[1][5];
int x = 40, y = 540;
points[0][0] = Point(0 + y, 50 + x);
points[0][1] = Point(40 + y, 0 + x);
points[0][2] = Point(110 + y, 35 + x);
points[0][3] = Point(74 + y, 76 + x);
points[0][4] = Point(28 + y, 96 + x);
const Point* ppt[1] = { points[0] };
int npt[] = { 5 };
polylines(img, ppt, npt, 1, 1, Scalar(0, 255, 255), 3);
/* 繪出文字 */
putText(img, "Test Passed !!", Point(10, 230), 0, 3, Scalar(255, 170, 130), 3);
/* 開啟畫布 */
namedWindow("OpenCV Test By:Charlotte.HonG", WINDOW_AUTOSIZE);
imshow("OpenCV Test By:Charlotte.HonG", img);
waitKey(0);
return 0;
}
如果做到這邊才發現跟我一樣選錯了,要退回去include路徑那步重作
設定裡面 x86->x64 改了全部會歸零…
運行
設定好之後直接按F5運行吧~~
出現找不到 dll 檔案,重新啟動一下 Visual Studio 2017 。
其他
如果需要完整的OpenCV功能,比如說 SIFT 等這些實作需要自己重新編譯,重新編譯可以參考這篇站內文,手動編譯原始檔的方法。
http://charlottehong.blogspot.com/2017/07/opencv-320-contrib-visual-studio.html
http://charlottehong.blogspot.com/2017/07/opencv-320-contrib-visual-studio.html
你好,想請問為何我的visual沒有w32主控台應用程式?
回覆刪除2017這幾周剛改版,位置變動了。可以查看這篇站內文
刪除https://charlottehong.blogspot.tw/2017/09/visual-studio-17-win32.html
您好~~ 我照著步驟設定
回覆刪除Path 也已經設定好了 平台也選擇x64 但是我下載的是opencv3.3 所以
我的lib檔案我選擇 opencv_world330d;%(AdditionalDependencies)
但是執行時 會出現
無法開啟檔案 'opencv_world330d.obj' 請問是怎麼回事呢?
這幾天我在試試看新版的
刪除沒有出現這個錯誤正常執行,照著步驟重做一次試試看。
刪除bin路徑要用x64/vc14/bin 才是正確的。
你好~我遇到了一點問題
回覆刪除在執行時出現一段錯誤訊息:{ 程式碼無法繼續執行,因為找不到 opencv_world330d.dll} 想請問如何解決?
可能是環境變數那個步驟出問題
刪除嗯..今天才發現截圖中的一個步驟出錯了,環境變數那邊的路徑我貼錯了。
刪除作者已經移除這則留言。
刪除我也遇到一樣的情況,但最後是把dll複製到執行目錄才找到dll的
刪除環境變數的路徑設錯,圖片中的錯了,圖底下的文字有說明正確的路徑。
刪除或者是VC在設置環境變數之前就己經開啟,重開就好了。
刪除請問~在偵錯時說專案已過期是為甚麼呢~
回覆刪除你好,我下載的Lib檔案中是opencv_world331d.lib,我是自動把輸入裡面其他相依性的路徑也改成331嗎?
回覆刪除另外,想要詢問如果跑出 main 在opencv.test.main.obj中已經定義過了(LNK2005),且說一個或以定義的符號(LNK1169)。請問是出了什麼問題。
謝謝
那個,我好像解決了。
刪除把下載的檔案名稱改成別的就沒有衝突了
抱歉,打擾了
不會啦,沒關係~解決就好
刪除請問一下 我一直開啟不了 來源檔案 這是?哈哈 不太懂
回覆刪除#include
什麼來源檔
刪除中間環境變數圖片位置有錯,底下文字說明才是正確的,看看是不是這個的關係,改變環境變數後,要重啟VS2017
刪除已更改謝拉~~
刪除你好,我想稍微問一下,按照了樓主的教學,我成功的安裝好了Opencv,但再按下F5後,並沒有顯示完整的圖片,而是出現灰色的畫布後,畫布閃一下,程式自動關閉,很像沒有觸發waitkey一樣。
回覆刪除但我後來靠imwrite跑程式後,確實有產出一個正確完整的圖片,不知道是什麼原因? 謝謝
想請問安裝的版本是範例中的版本嗎~
刪除可能有那裡有沒設定好或是怎麼樣,檢查一下有沒有把原本應該是 Debug 要用的檔案設定給 release 使用或是反過來之類的狀況。
我的畫布也是閃一下就關閉了,不知如何解決。
回覆刪除我在開啟畫布加上這一列就可以看到了
回覆刪除/* 開啟畫布 */
namedWindow("Display window", WINDOW_AUTOSIZE);
waitKey(0); 本身就是暫停的功能了,我也不清楚沒有暫停的原因是什麼,按道理照著做應該會暫停的。
刪除> 不過有解決就好~其他人有問題的也可以試試看這一個方法
為什麼不能按照原本的代碼暫停想請問
1. 使用的opencv版本是否一致。
2. 程式碼複製的時候是否漏了那一行。
作者已經移除這則留言。
回覆刪除沒錯呀 本文圖中剛建立的時候也是這樣,只有4個
刪除並不是對來源檔案按右鍵,可以參考本文圖中說明,點擊可看大圖。
你好,請問我方案總管中只有 外部相依性/來源檔案/資料檔/標頭檔,其中的來源檔案就是原始程式檔嗎?
回覆刪除更新一下你的VS,然後重建一個新專案,應該就一樣了
刪除是昨天才安裝好的2017
刪除了解~沒關係一樣的東西
刪除測試了一下全新安裝的名稱是你的那樣沒錯,我的可能是舊版本升級上的名稱是那樣。
請問新增專案時空專案和WIN32的差別在哪裡?
刪除我利用你的測試碼時使用空專案無法建置,而使用WIN32才可以
因為我自己有買書來看,但書上都是新增空專案來執行
你好,我照上面的步驟做完之後按下F5,畫面一閃就結束了。
回覆刪除我在程式碼尾端加上system("pause");後,畫面成功停住,但"OpenCv Test By:Charlotte.HonG"的視窗裡沒有圖形,我是否有哪個步驟做錯了呢?
註:我的OpenCv是3.4.0版本
刪除前面推文的方法試試看~我有加進文章了,你可以重新複製看看
刪除或者是加入
namedWindow("OpenCV Test By:Charlotte.HonG", WINDOW_AUTOSIZE);
文章的最開頭有懶人包,你試試看那個,裡面有我配置好的專案。
刪除如果懶人包執行是正常的,那應該就是其中一個步驟弄錯意思了。
已成功顯示畫面了,感謝版主!
刪除最後是用哪個方法實現的
刪除是使用前面推文的方法完成的。
刪除Visual Studio 2017 我測試應該要用vc15,用vc14會有無法開啟錯誤
回覆刪除感謝提醒,因為 VS2017 橫跨了兩個版本(內部版本是 14.0 與 14.1),文章沒更新。(我其實也沒注意到有多這個文件)
刪除在2017年的時候使用 opencv320 是 VC14 的文件,後來改版後的opencv341內有 VC15 與 VC14 。
VS2017 -> VC15 文件
VS2015 -> VC14 文件
感谢您分享这篇文章,不知可否摘取其中部分内容(方法和代码)进行转载?我会在转载中注明本文地址。(PS:看到上面一条留言说 VC14 和 VC15 的问题,我这边 vs2017 使用 VC14是正常的,仅此一提,大家还是要自行测试一下)
回覆刪除好的 請保留ID及原文網址~~(不過沒有科學上網是不是連不過來啊QuQ)
刪除我是還沒實際跑 15 跟 14 的差異,根據我在安裝 cuda9.0 的時候因為 VS2017 版本的更新導致不能用,必須從 14.1 降版到 14.0,直覺就覺得說或許 vc15 是給內和版本 14.1 用的;這幾天跑跑看會在更新結果。
哇,感谢。是要科学上网才行(很不方便(T_T)),大陆找到一些文章都不太实用。看您博客有好多好文章,以后会常常访问,再次感谢。
刪除不會~感謝支持XDD
刪除感謝大大~ 找了一堆資料 照著這個做終於成功
回覆刪除不會 ~ 恭喜呀
刪除感謝詳細說明!
回覆刪除執行程式時,出現對話框找不到檔案C:\Users\user\source\repos\opencv_test\x64\Debug\opencv_test.txt,實際看資料夾裡面也沒有,不知道哪裡出錯了
回覆刪除還蠻奇怪的~應該是有那裡弄錯,重新開一個新的重新做一次看看
刪除你好我照上面完成設定
回覆刪除在編寫時候語法是沒有報錯的
但是編譯的時候錯誤一堆,關於openCV的一切function,常數,命名空間 都會報錯說是找不到識別項,為了好說明我用一個簡短的code
以下code
#include
#include
#include
#include
#include "stdafx.h"
using namespace cv;
int main()
{
printf("I must confess that I feel like a monster");
Mat img = imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
/*imwrite("output.jpg", img);
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", img);
waitKey(0);
return 0;*/
}
在編譯時會報錯:
嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態
錯誤 C2871 'cv': 此名稱的命名空間不存在 ConsoleApplication2 c:\users\sasalicat\source\repos\consoleapplication2\consoleapplication2\consoleapplication2.cpp 8
嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態
錯誤 C2065 'CV_LOAD_IMAGE_GRAYSCALE': 未宣告的識別項 ConsoleApplication2 c:\users\sasalicat\source\repos\consoleapplication2\consoleapplication2\consoleapplication2.cpp 13
嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態
錯誤 C2065 'img': 未宣告的識別項 ConsoleApplication2 c:\users\sasalicat\source\repos\consoleapplication2\consoleapplication2\consoleapplication2.cpp 13
嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態
錯誤 C3861 'imread': 找不到識別項 ConsoleApplication2 c:\users\sasalicat\source\repos\consoleapplication2\consoleapplication2\consoleapplication2.cpp 13
嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態
錯誤 C2065 'Mat': 未宣告的識別項 ConsoleApplication2 c:\users\sasalicat\source\repos\consoleapplication2\consoleapplication2\consoleapplication2.cpp 13
嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態
錯誤 C2146 語法錯誤: 遺漏 ';' (在識別項 'img' 之前) ConsoleApplication2 c:\users\sasalicat\source\repos\consoleapplication2\consoleapplication2\consoleapplication2.cpp 13
---------------------------------------------------------------
我覺得這個問題的原因是linker在檢查lib時沒有找到以上所有東西,因為只有在編譯時才會報錯,在編寫時編譯器沒有檢查出錯誤,但我怎麼也看不出我有哪裡設置錯誤
以下是一些設置
其他Include 目錄:D:\openCV\3.4.1\opencv\build\include;%(AdditionalIncludeDirectories)
其他程式庫目錄:D:\openCV\3.4.1\opencv\build\x64\vc15\lib;%(AdditionalLibraryDirectories)
其他相依性:opencv_world341d.lib;opencv_world341.lib;%(AdditionalDependencies)
環境變數我也設置了
希望大大指點,我真的束手無策了
注意到你的內文使用的代碼並不是教學中的代碼,而且看起來並不完整不確定出什麼狀況,你說有照著有照教學走我覺得很奇怪~
刪除建議先從頭照著教學走試試看~不行可以在提出來討論。認真說~如果交叉著兩篇教學混合我也很難找出問題~
您好,小弟有兩個問題想請問一下:
回覆刪除1. 在Windows桌面專案那張圖中,我在勾選時為什麼空白專案(E)與先行編譯標頭檔(P)無法同時勾選?
2. 在OpenCV_test屬性頁那張圖中,顯示的是 平台(P):作用中(Win32), 而我在操作時為什麼是顯示 平台(P):Win32
而我按F5後會顯示: 建置發生錯誤 要繼續並且執行上次成功的組建嗎?
按"是"後會顯示: 無法啟動程式 'C:\User\Marlarkey\source\repos\OpenCV_test\x64\Debug\OpenCV_test.exe' 系統找不到指定的檔案
希望板主大大能救救我><
1 的先行編譯會產生一個 xxxx.h 可以建一次看看空白專案內不會有這個,就不讓你打勾了。不過取消先行編譯跟打勾空白專案是否相等這個我不確定。
刪除2. 是不是有什麼字變成亂碼了? 注意到你提到win32,應該是要選x64,教學圖中是我選錯了內文有說明。看來還是不能偷懶~這幾天會修正。
3. 可能是2導致的
太棒了!
回覆刪除真的太棒了~我也覺得wwww
刪除重新做了兩次
回覆刪除還是失敗
請大大求解
第一行都是
嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態
錯誤 (作用中) E1696 無法開啟 來源 檔案 "opencv2/opencv.hpp" test C:\Users\User\source\repos\test\test\Source.cpp 2
試過改更v15的那個部分
還是沒有用
文章是有一小段時間了,我正在嘗試從全新的 win10 照著本文安裝實測,有變動會新增上來。
刪除驗證ok文章還是堪用的~
刪除檢查一下 include 路徑裡面是不是真的有東西。
include 路徑 也重新檢查過了
刪除我朋友照做也有成功
但我的就是炸裂
都跳出
C++ 無法開啟 來源 檔案 "opencv2/opencv.hpp"
總算解決include問題
刪除但是跳出新的問題
無法開啟opencv world_343d.lib
這在 bin 路徑底下,檢查一下是不是沒設好環境變數。可以試著找你從朋友看著你從頭照著做一次,可能是某些地方誤會文章意思或是做錯,但是本身沒發覺。
刪除執行後說 程式碼執行無法繼續,因為找步道MSVCP110D.dll
回覆刪除檢查看看 x64 跟 x86 有沒有設錯了
刪除#include
回覆刪除#include
using namespace cv;
int main() {
Mat src = imread("lena.jpg", CV_LOAD_IMAGE_COLOR);
Mat src_gray = imread("lena,jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat contoursImg = src.clone();
Mat edge;
blur(src_gray, src_gray, Size(3, 3));
Canny(src_gray, edge, 50, 150, 3);
vector> contours;
vectorhierarchy;
RNG rng(12345);
findContours(edge, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE);
for (int i = 0; i < contours.size(); i++) {
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), 255);
drawContours(contoursImg, contours, i, color, 2, 8, hierarchy);
}
imshow("origin", src);
imshow("result", contoursImg);
waitKey(0);
return 0;
}
我這個程式執行後會跳出例外狀況"0x00007FFF49DA4008 中 (於 Project2.exe) 發生未處理的例外狀況"
然後會跑出一個視窗寫"OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat,"
環境設定也設定過了都調好了
上網google也找不到解決方法
不知道問題是出在哪呢?
( 我是用Visual Studio 2017 ; opencv 2.4.13版 vc14 )
先試試看文中的做法吧,另外2413提供的預編譯檔案不一定能給2017最新版用,看情況可能需要重編。
刪除文章中解決沒找到include問題
回覆刪除圖片上錯誤的
C:\opencv3.4.1\opencv\build\include
謝謝您的教學已經成功在新的2017 IDE編輯Opencv !!
感謝分享 已經成功編譯了
回覆刪除請問 F5執行後錯誤是
回覆刪除錯誤 C1010 尋找先行編譯標頭檔指示詞時碰到未預期的檔案結尾。您的原始檔中是否忘了加上 '#include "stdafx.h"'?
想請問大大 苦惱很久Q_Q
已解決 自己耍低能 ==
刪除不會~
刪除您好,目前使用win7 opencv4.0.1 VisualStudio2017,在安裝完成即按照上述設定完成後,按下debug,下面資訊有些"已載入符號"、有些則是"找不到或無法開啟 PDB 檔案",windows project跑出的結果是一片空白,想請您幫忙指教,謝謝
回覆刪除先試試看 341 的能不能~
刪除寫了一篇新文章~
刪除對應到 VS2019 + opencv401 的
操作介面上,如果不能升級到2019的話,跟2017沒差太多,是可以通用的~
非常感謝您的回覆,在重新下載3.4.1、按照步驟設定完所有環境後,執行後依照系統提是加入#include "stdafx.h",跳出新視窗仍是一片空白,希望能給予指教,謝謝你
刪除看起來好像跟樓上那一樓一樣的問題。
刪除我也沒遇到過不曉得哪邊出問題了,能想到的是當初建立專案的時候如果沒有打勾空白專案會自己出現#include "stdafx.h",不知道是不是有漏打勾了~
試著完整重新建立看看~
已解決問題,非常感謝您!!!!
刪除試了千百種可以讓C++ 跑opencv的方法終於成功了 感謝樓主大大一生平安
回覆刪除挖,那真是太好惹~
刪除辛苦了XDD 想到我當初也試了好幾篇QuQ
請問樓主 我剛剛在執行你的最後測試時,遇到了這個錯誤:連結器工具錯誤 LNK1112
回覆刪除好像是說什麼我電腦上是x86 然後編譯器是x64 請問這個該如何解決 我用的是VS2017
程式寫模組電腦類型x64跟目標電腦類型x86衝突QQ
刪除對的~有可能系統是安裝32位元的作業系統,導致沒辦法使用x64的函式庫
刪除官方沒提供32位元的,只能自己編譯。不過還是先確認是不是這個問題,檢查一下。
可以開始搜尋關於,打開之後再下方找到"系統類型"
看是不是寫 64位元系統64型處理器。
(後面固定都是64現在32的CPU已經太久遠了~)
漏了,在"開始"搜尋,就是左下角那個微軟點開,然後可以直接打字搜尋,看起來沒打字框打了就會出現。
刪除您好首先很感謝教學,已成功執行,另外想請問在VS 2017上如果要玩openCV,那每次開新專案都需要如本篇重新配置路徑嗎? 謝謝!
回覆刪除是的這篇的配置方法(網路上能搜到的大多也是這樣)每次都要從心打一次路徑,只有環境變數只需要設置一次。
刪除要儲存的話可以參考開頭vs2019那篇的配置方法,vs2017+opencv3.4一樣通用的,這個方法配置一次之後可以儲存設置擋每次只要載入設定檔即可。
作者已經移除這則留言。
回覆刪除我看圖中的程式碼,看起來並不是範例提供的。
刪除先確定一下看看是不是程式碼本身有問題。
作者已經移除這則留言。
回覆刪除