日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

一个系统中同时使用VC6.0+OpenCV1.0和VS2010+OpenCV2.4.6.0的方法

發(fā)布時(shí)間:2023/12/9 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个系统中同时使用VC6.0+OpenCV1.0和VS2010+OpenCV2.4.6.0的方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

From:? http://blog.csdn.net/zzy7222872/article/details/6047446

以前用的是VC6.0+OpenCV1.0的組合,一直用的很好。一般的圖像處理算法都可以實(shí)現(xiàn),現(xiàn)在突然想搞一下立體視覺(jué)方面的東西,查看了OpenCV的手冊(cè),發(fā)現(xiàn)立體視覺(jué)上的大部分函數(shù)只有OpenCV1.0以上版本才有。于是乎準(zhǔn)備鳥(niǎo)槍換炮上OpenCV2.0,一查資料,發(fā)現(xiàn)OpenCV2.0不能再VC6.0下跑,于是乎只好裝VS2005,但是又怕裝了以后和原來(lái)的VC6.0沖突,導(dǎo)致以前的工程都不能用。上網(wǎng)查了資料說(shuō)裝在不同路徑下是沒(méi)問(wèn)題的。于是大膽安裝在其他目錄下,裝好后果然不沖突,看來(lái)只要路徑不同就沒(méi)問(wèn)題,微軟的工程師也不是菜鳥(niǎo)啊。接下來(lái)搞定OpenCV2.0,我想在能用原來(lái)1.0版本的情況下也可以用2.0的版本,于是將OpenCV2.0裝在了和原來(lái)版本不同的目錄下,裝完Ok,沒(méi)有問(wèn)題。接下來(lái)是配置。OpenCV2.0的配置沒(méi)有原來(lái)1.0的簡(jiǎn)單,需要自己下載CMAKE來(lái)產(chǎn)生需要的dll和lib文件。一下參考了一篇帖子如下。

1.Opencv2.0下載地址:
http://www.opencv.org.cn/index.php/Download
安裝時(shí)選擇默認(rèn)路徑,安裝后檢查C:/OpenCV2.0/bin
是否已經(jīng)被加入到環(huán)境變量PATH,如果沒(méi)有,請(qǐng)加入。
加入后需要注銷當(dāng)前Windows用戶(或重啟)后重新登陸才生效。
2.配置IDE,打開(kāi)VS2005,選擇菜單:Tools -> Options,在彈出窗口中選擇
Projects and Solutions -> VC++ Directories
首先,從“Show Directories for”的list box中選擇“Include files”,
添加路徑“C:/OpenCV2.0/include/opencv”。
3.添加庫(kù)文件(library files),需要下載CMAKE,用來(lái)生產(chǎn)所需的庫(kù)文件,cmake下載地址:
http://www.cmake.org/cmake/resources/software.html
打開(kāi)cmake-gui。在第一個(gè)路徑處選擇opencv的安裝路徑,記得是CMakeLists.txt所在的那個(gè)路徑。
第二個(gè)路徑是 make得到的工程保存位置。
點(diǎn)擊Configure并選擇合適的編譯器。選擇完編譯器之后需點(diǎn)擊Configure兩次,
最后點(diǎn)擊Generate生成我們想要的工程文件(.lib? .dll)。
4.打開(kāi)make得到的工程保存位置中的OpenCV.sln文件,build solution后在工程目錄下得到bin和lib的文件夾,
將bin/debug中的.dll文件復(fù)制到C:/OpenCV2.0/bin,將lib/debug中的.lib文件復(fù)制到C:/OpenCV2.0/lib,
5.添加庫(kù)文件(library files),選擇菜單:Tools -> Options,在彈出窗口中
選擇Projects and Solutions -> VC++ Directories,首先,從“Show Directories for”的list box中
選擇“Library files”,添加路徑“C:/OpenCV2.0/lib”。選擇“source files”,
添加路徑“C:/OpenCV2.0/src/cv”,“C:/OpenCV2.0/src/cvaux”,“
C:/OpenCV2.0/src/cxcore”,“C:/OpenCV2.0/src/highgui”,“C:/OpenCV2.0/src/ml”。
6.建立project后要設(shè)置項(xiàng)目所需要的lib,
選擇菜單Project -> Properties -> Configuration Properties -> Linker -> Input,
在additional dependencies中加入cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib等需要的庫(kù)。
注意加入的庫(kù)文件要和第3步生成的文件名一致,假如在第3步中選擇VS2005的編譯器時(shí),
生成的文件名含有200d(不知道其他的編譯器會(huì)不會(huì)),此時(shí)加入的庫(kù)文件應(yīng)該
cxcore200d.lib cv200d.lib ml200d.lib cvaux200d.lib highgui200d.lib
每次新建一個(gè)project都要添加項(xiàng)目所需的lib

按上面的提示配置完后拷貝了以O(shè)penCV中文論壇上的2.0版本的helloworld程序,發(fā)現(xiàn)有fatal error C1010: unexpected end of file while looking的錯(cuò)誤,?查了下是預(yù)編譯頭的問(wèn)題,解決方法是在設(shè)置那C/C++的Category的選項(xiàng)框選擇Precompiled Headers 然后再選擇Not using precompiled headers,這樣再編譯一下,Ok通過(guò)。運(yùn)行一下,終于看到了經(jīng)典的lena照片。

現(xiàn)在情況如下,我在VC6.0平臺(tái)下使用OpenCV1.0庫(kù),在VS2005下使用OpenCV2.0庫(kù),暫時(shí)運(yùn)行正常,沒(méi)有沖突。寫段文章總結(jié)一下,防止以后忘了,想雙平臺(tái)運(yùn)行的朋友也可以參考一下。如有Bug出現(xiàn),也希望大家提出來(lái)。


=================================================================================

以下為個(gè)人整理的內(nèi)容:

根據(jù)參考的那篇博文說(shuō):需要自己下載CMake來(lái)產(chǎn)生需要的dll和lib文件!

但是我是從網(wǎng)上下載了OpenCV2.4.6.0, 雙擊解壓后,發(fā)現(xiàn)里面有現(xiàn)成的dll和lib文件,可以直接使用,不需要下載CMake來(lái)編譯產(chǎn)生dll和lib文件


下面的源代碼來(lái)自http://docs.opencv.org/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.html

本人實(shí)現(xiàn)了下,環(huán)境:vc2010 + OpenCV2.4.6.0

/*環(huán)境:winXP + vc2010 + OpenCV2.4.6.0(http://jaist.dl.sourceforge.net/project/opencvlibrary/opencv-win/2.4.6/OpenCV-2.4.6.0.exe)OpenCV2.4.6.0安裝目錄:D:\opensource\opencv1. 添加頭文件所在目錄:D:\opensource\opencv\modules\core\includeD:\opensource\opencv\modules\imgproc\includeD:\opensource\opencv\modules\highgui\include注:以上三個(gè)目錄可用“D:\opensource\opencv\build\include”一個(gè)代替!2. 添加lib文件所在目錄:D:\opensource\opencv\build\x86\vc10\lib3. 為項(xiàng)目添加使用到的lib文件:opencv_core246d.lib;opencv_imgproc246d.lib;opencv_highgui246d.lib;配置完成,編譯成功!運(yùn)行時(shí),可能會(huì)出現(xiàn)提示:缺少xxx.dll,這時(shí)只要將相關(guān)dll復(fù)制到可執(zhí)行程序同一目錄或?qū)ll所在目錄加入到Path環(huán)境變量中!我采取的是將“D:\opensource\opencv\build\x86\vc10\bin”加入到Path環(huán)境變量中!再次運(yùn)行,OK! */// Video Image PSNR and SSIM #include <iostream> // for standard I/O #include <string> // for strings #include <iomanip> // for controlling float print precision #include <sstream> // string to number conversion#include <opencv2/imgproc/imgproc.hpp> // Gaussian Blur #include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar) #include <opencv2/highgui/highgui.hpp> // OpenCV window I/Ousing namespace std; using namespace cv;double getPSNR ( const Mat& I1, const Mat& I2); Scalar getMSSIM( const Mat& I1, const Mat& I2);static void help() {cout<< "\n--------------------------------------------------------------------------" << endl<< "This program shows how to read a video file with OpenCV. In addition, it tests the"<< " similarity of two input videos first with PSNR, and for the frames below a PSNR " << endl<< "trigger value, also with MSSIM."<< endl<< "Usage:" << endl<< "./video-source referenceVideo useCaseTestVideo PSNR_Trigger_Value Wait_Between_Frames " << endl<< "--------------------------------------------------------------------------" << endl<< endl; } int main(int argc, char *argv[]) {help();if (argc != 5){cout << "Not enough parameters" << endl;return -1;}stringstream conv;const string sourceReference = argv[1], sourceCompareWith = argv[2];int psnrTriggerValue, delay;conv << argv[3] << argv[4]; // put in the stringsconv >> psnrTriggerValue >> delay;// take out the numberschar c;int frameNum = -1; // Frame counterVideoCapture captRefrnc(sourceReference), captUndTst(sourceCompareWith);if ( !captRefrnc.isOpened()){cout << "Could not open reference " << sourceReference << endl;return -1;}if( !captUndTst.isOpened()){cout << "Could not open case test " << sourceCompareWith << endl;return -1;}Size refS = Size((int) captRefrnc.get(CV_CAP_PROP_FRAME_WIDTH),(int) captRefrnc.get(CV_CAP_PROP_FRAME_HEIGHT)),uTSi = Size((int) captUndTst.get(CV_CAP_PROP_FRAME_WIDTH),(int) captUndTst.get(CV_CAP_PROP_FRAME_HEIGHT));if (refS != uTSi){cout << "Inputs have different size!!! Closing." << endl;return -1;}const char* WIN_UT = "Under Test";const char* WIN_RF = "Reference";// WindowsnamedWindow(WIN_RF, CV_WINDOW_AUTOSIZE );namedWindow(WIN_UT, CV_WINDOW_AUTOSIZE );cvMoveWindow(WIN_RF, 400 , 0); //750, 2 (bernat =0)cvMoveWindow(WIN_UT, refS.width, 0); //1500, 2cout << "Frame resolution: Width=" << refS.width << " Height=" << refS.height<< " of nr#: " << captRefrnc.get(CV_CAP_PROP_FRAME_COUNT) << endl;cout << "PSNR trigger value " <<setiosflags(ios::fixed) << setprecision(3) << psnrTriggerValue << endl;Mat frameReference, frameUnderTest;double psnrV;Scalar mssimV;for(;;) //Show the image captured in the window and repeat{captRefrnc >> frameReference;captUndTst >> frameUnderTest;if( frameReference.empty() || frameUnderTest.empty()){cout << " < < < Game over! > > > ";break;}++frameNum;cout <<"Frame:" << frameNum;/ PSNR psnrV = getPSNR(frameReference,frameUnderTest); //get PSNRcout << setiosflags(ios::fixed) << setprecision(3) << psnrV << "dB";MSSIM /if (psnrV < psnrTriggerValue){mssimV = getMSSIM(frameReference,frameUnderTest);cout << " MSSIM: "<< "R" << setiosflags(ios::fixed) << setprecision(3) << mssimV.val[2] * 100<< "G" << setiosflags(ios::fixed) << setprecision(3) << mssimV.val[1] * 100<< "B" << setiosflags(ios::fixed) << setprecision(3) << mssimV.val[0] * 100;}cout << endl;// Show Image /imshow( WIN_RF, frameReference);imshow( WIN_UT, frameUnderTest);c = (char)cvWaitKey(delay);if (c == 27) break;}return 0; }double getPSNR(const Mat& I1, const Mat& I2) {Mat s1;absdiff(I1, I2, s1); // |I1 - I2|s1.convertTo(s1, CV_32F); // cannot make a square on 8 bitss1 = s1.mul(s1); // |I1 - I2|^2Scalar s = sum(s1); // sum elements per channeldouble sse = s.val[0] + s.val[1] + s.val[2]; // sum channelsif( sse <= 1e-10) // for small values return zeroreturn 0;else{double mse =sse /(double)(I1.channels() * I1.total());double psnr = 10.0*log10((255*255)/mse);return psnr;} }Scalar getMSSIM( const Mat& i1, const Mat& i2) {const double C1 = 6.5025, C2 = 58.5225;/***************************** INITS **********************************/int d = CV_32F;Mat I1, I2;i1.convertTo(I1, d); // cannot calculate on one byte large valuesi2.convertTo(I2, d);Mat I2_2 = I2.mul(I2); // I2^2Mat I1_2 = I1.mul(I1); // I1^2Mat I1_I2 = I1.mul(I2); // I1 * I2/*************************** END INITS **********************************/Mat mu1, mu2; // PRELIMINARY COMPUTINGGaussianBlur(I1, mu1, Size(11, 11), 1.5);GaussianBlur(I2, mu2, Size(11, 11), 1.5);Mat mu1_2 = mu1.mul(mu1);Mat mu2_2 = mu2.mul(mu2);Mat mu1_mu2 = mu1.mul(mu2);Mat sigma1_2, sigma2_2, sigma12;GaussianBlur(I1_2, sigma1_2, Size(11, 11), 1.5);sigma1_2 -= mu1_2;GaussianBlur(I2_2, sigma2_2, Size(11, 11), 1.5);sigma2_2 -= mu2_2;GaussianBlur(I1_I2, sigma12, Size(11, 11), 1.5);sigma12 -= mu1_mu2;/ FORMULA Mat t1, t2, t3;t1 = 2 * mu1_mu2 + C1;t2 = 2 * sigma12 + C2;t3 = t1.mul(t2); // t3 = ((2*mu1_mu2 + C1).*(2*sigma12 + C2))t1 = mu1_2 + mu2_2 + C1;t2 = sigma1_2 + sigma2_2 + C2;t1 = t1.mul(t2); // t1 =((mu1_2 + mu2_2 + C1).*(sigma1_2 + sigma2_2 + C2))Mat ssim_map;divide(t3, t1, ssim_map); // ssim_map = t3./t1;Scalar mssim = mean( ssim_map ); // mssim = average of ssim mapreturn mssim; }



總結(jié)

以上是生活随笔為你收集整理的一个系统中同时使用VC6.0+OpenCV1.0和VS2010+OpenCV2.4.6.0的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。