OpenCv Code::Blocks Kurulumu

Başlatan yldzelektronik, 09 Mayıs 2014, 17:38:32

picusta

"Project" > build options > Search directories.
Compiler için :  include dosyasi seçilir OpenCV \build\include
Linker için : Lib dosyasi (hang platform, debug mu release mi degisir)
Linker settings de .libler ilave edilir.
buna ragmen linker kernel32.lib  dosyasini açamaz.

Suradan devam etmekte fayda var:
http://stackoverflow.com/questions/19589967/opencv-error-lnk1104-cannot-open-file-opencv-core231-lib



DEno_12

OpenCV'yi yaklaşık 3 yıl önce CodeBlocks_MinGW üzerinde rahat bir şekilde çalıştırdığımı hatırlıyorum.Hiç bu kadar sıkıntı yaşamamıştım, hatta hiç sıkıntı yaşamamıştım diyebilirim.
Tabi o zamanki sürümler muhakkak daha eskiydi, belkide ondan.
Metodum şöyleydi:
OpenCV yi PC ye Visual C++ için kurmuş, Visual Studio da projeye ekleyebilmiştim. Sonrasında CodeBlocks için ayrı bir döküman incelemedim.Zaten PC de kurulu olan kütüphaneleri CodeBlocks ta C++ projesi açarak projeye gösterdim.
Gayet güzel çalışmıştı.

yldzelektronik

VS için ben de çalıştırabiliyorum.Fakat codeblocks olmuyor nedense.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

DEno_12

Hızlıca bir sanal makine kurup orada sıfırdan deneme imkanınız var mı acaba? Belki kendi bilgisayarınızda ve iş bilgisayarınızda yüklü olan ortak bir program codeblocks ya da MinGW ye sıkıntı çıkarıyor olabilir.

yldzelektronik

Alıntı yapılan: DEno_12 - 18 Mayıs 2014, 20:50:15
Hızlıca bir sanal makine kurup orada sıfırdan deneme imkanınız var mı acaba? Belki kendi bilgisayarınızda ve iş bilgisayarınızda yüklü olan ortak bir program codeblocks ya da MinGW ye sıkıntı çıkarıyor olabilir.

Bilgisayarımda profil çökmesi sorunuyla karşılaşınca kendi bilgisayarımda rafa kalktı. İş yerine de yükleyemem.İzin yok.Son durum olarak aynı yerdeyim.Kodu yazıp derlemeyi denediğimde derleyici hata veriyor.
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

int main()
{
    Mat image;// new blank image
    image = cv::imread("test.png", 0);// read the file
    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// create a window for display.
    imshow( "Display window", image );// show our image inside it.
    waitKey(0);// wait for a keystroke in the window
    return 0;
}


Bu kod için aldığım hata çıktısı şöyle;

||=== Build: Debug in Opencv (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\PROJELER\Software Projects\Opencv\main.cpp|9|undefined reference to `cv::imread(std::string const&, int)'|
C:\PROJELER\Software Projects\Opencv\main.cpp|10|undefined reference to `cv::namedWindow(std::string const&, int)'|
C:\PROJELER\Software Projects\Opencv\main.cpp|11|undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'|
C:\PROJELER\Software Projects\Opencv\main.cpp|11|undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'|
C:\PROJELER\Software Projects\Opencv\main.cpp|12|undefined reference to `cv::waitKey(int)'|
obj\Debug\main.o||In function `ZN2cv3MatD1Ev':|
C:\PROJELER\Software Projects\Opencv\..\..\..\Opencv242\opencv\build\include\opencv2\core\mat.hpp|278|undefined reference to `cv::fastFree(void*)'|
obj\Debug\main.o||In function `ZN2cv3MataSERKS0_':|
C:\PROJELER\Software Projects\Opencv\..\..\..\Opencv242\opencv\build\include\opencv2\core\mat.hpp|298|undefined reference to `cv::Mat::copySize(cv::Mat const&)'|
obj\Debug\main.o||In function `ZN2cv3Mat7releaseEv':|
C:\PROJELER\Software Projects\Opencv\..\..\..\Opencv242\opencv\build\include\opencv2\core\mat.hpp|367|undefined reference to `cv::Mat::deallocate()'|
||=== Build failed: 8 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|


Şunu fark ettim.Baştaki include satırlarını yazarken code::blocks bana kod tamamlama özelliği ile bütün kütüphane yollarını gösteriyor. Yani mesela ben open yazmaya başlar başlamaz hemen opencv kütüphanesinin tamamını gösteriyor. Demek ki kütüphane için gerekli yolları doğru şekilde göstermişim.

Aldığım hatalar derleyici ile ilgili bir yanlış olduğunu söylüyor bence.

Yanlış mı düşünüyorum?

Basit hello world ile derleme yapsam sorun olmuyor.Derleyip çalıştırabiliyorum.Ancak opencv içerikli hiçbir programı çalıştıramadım.

Nerede hata yapıyorum?Yada ne yapmak gerekli?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

picusta

Bu hatalar derleme asamasinda degil de link asamasinda olusuyor.

Sen .h dosyalarini dogru bir sekilde yerlestirdin config ettin, o yüzden autocomplete çalisacaktir, derleyici dosyayi bulacaktir.
Fakat bir sonraki asamada fonksyonun implementation'unu hiçbir yerde bulmayacaktir. çünkü implementation .lib doysalarinin içinde.
.lib'ler ise 2 kere 2 kategoriye ayrilir:
Platform : x86 - x64
Debug içerigi :  Debug - Release.
Yani ayni .lib için 4 dosya bulacaksin, degisik klasörlerde olabilir. örn opencv_core246.lib.
Sen projenin ayarlarinda derlemek istedigin "profil" için dogru klasörleri seçmelisin.
Eger öyle yapmak istemiyorsan kodunda ilaveten belirtmelisin : #ifdef DEBUG pragma vs.. kullanmalisin (geçmis zaman, syntax'ini hatirlamiyorum, derleyice göre degisir).

.lib'lerin amaci her proje için OpenCV'yi yeniden derlemeyi önlemektir.
.h ve .lib verilir, bütün kaynak kod verilmez.

Bazi .lib'ler dinamiktir, yani içi bos, sadece bir dll'i isaret eder. Senin onu programinda kullanirsin (.h ile autocomplete, linker memnun kalsi diye) ama kütüphane program baslarken dinamik olarak DLL'den yüklenir.

Bu kadar teorik açiklama umarim yetmistir, sorunun nereden geldigini umarim anlamissindir.
Simdi çözüm için "additional dependency" ve "Additional library directories" CodeBlocks'ta nereden ayarlaniyor bulmalisin.
Verdigim link'i bir incele, orayi izleyince bu hatalar gidiyor (yerine baskalari baska nedenlerden gelebilir tabii).

yldzelektronik

@picusta yanıt için teşekkürler.

http://kevinhughes.ca/tutorials/opencv-install-on-windows-with-codeblocks-and-mingw/comment-page-1/ adresinde yazdığı şekilde her şeyi yaptım. Yalnızca

"When cmake is done we need to open a command prompt in the build directory, so navigate to C:\opencv\build\x86\mingw then shift right click and choose open command window here then type "mingw32-make". Mingw will now start compiling OpenCV, this will take a bit so feel free to do something else, when you come back type "mingw32-make install" and continue with the rest of the tutorial as is."

kısmını yapamadım.Burayı anlamadım. Onun yerine ilgili klasörü açıp Opencv.cbp dosyasını açıp build ettim.

Ancak neden linker kısmında sorunla karşılaştığımı bir türlü anlamıyorum.Çünkü bütün söylenilenleri yaptığımı düşünüyorum.

Bahsettiğiniz "additional dependency" ve "Additional library directories" kısımlarını zaten build optionsdan yapıyorum. .lib dosyalarını değil de xxx.dll.a dosyalarını gösterdiği için ben de onları seçiyorum (verdiğim linkte anlatıldığı için).
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

picusta

C:\opencv\build\x86\mingw   dosyasini açip (explorer) bos bir yere shifti basilip tutup sag tiklayacaksin.
cmd çikiyor.
Baska bir yöntem baslangica cmd yazip sonra cd .. ile klasöre ulasmak.

cmd ekraninda mingw32-make  yaziyorsun, o derlemeye basliyor, zaman aliyor. sonra islem bitince ayni yere mingw32-make install  yaziyorsun.

.dll.a  dynamic lib'ler yerine geçiyor. x86 dimi ? debug 'mu release mi ?
Seçilen compiler'a da dikkat etmek gerekiyor.
Linkteki resimlere dikkat, örnegin bir resimde compiler yanlis seçilmis.
Klasörün içindekiler tamammi ? opencv_core246.lib veya opencv_core246.dll.a hangi klasörde ?




yldzelektronik

Sisten x86. Ancak şuan söylediklerinizi yapamiyorum. Evdeyim. Yanliz kendi bilgisayarimda bir klasorde iken shift sag click ile cmd acilmiyor? Sizde aciliyor mu?

Bir de compilera tekrar bakacagim fakat dogru diye hatirliyorum. Ben 242 ile deniyorum. Ayni gibi isimler. Sonu 242 sadece. Ancak cmakeden sonra mingw klasorunde .dll.a dosyalarinin her biri icin bir de ekstra helped gibi adi olan dosyalar da olustu. Mesela opencv_core242.dll.a var. Bir de opencv_corehelped242 gibi adi olan dosyalar olustu. O klasordeki gosterilen dosyalari sectim. Lib klasoruydu. Sonra bin klasorune baktim. Olmasi gerekenler aynen vardi. Yanliz bunlarin yaninda bir de .dll dosyalarinda vardi. Ayni adda. Bilgisayarimda profil cokmesi sorunu yuzunden hic bir eski dosyama erisemiyorum.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Şuanki durum itibariyle hata mesajı almadan derleme yapabiliyorum.

Yaptığım değişiklik yalnızca ide ayarlarındaki linker sekmesindeki path değiştirmek oldu.

Buradan Opencv\build\x86\mingw\lib içersindeki .dll.a dosyalarını seçiyordum. ...\mingw\bin kalsöründeki .dll dosyalarını seçtiğimde hata vermiyor.Ancak derleme sonucunda .exe dosyası oluşmuyor.

Sanırım tam olarak link ile ilgili problem şuan yaşanıyor.

Acaba neden oluyor olabilir?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Yani forumda hiç kimse derleyici bağlayıcı nedir neden bu tip hatalar alınır bilmiyor mu yoksa yol göstermek isteyen mi yok?

Merak ettiğim neden en azından sebebi şu olabilir diyen kimse yok.Programcılık ile ilgili birikimi iyi olduğu aşikar abilerimiz neden yorum yapmaktan veya yönlendirmekten bu nebze uzak duruyorlar (Bu konu için)
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

http://kevinhughes.ca/tutorials/opencv-install-on-windows-with-codeblocks-and-mingw/comment-page-1/

linkteki söylenenleri yaptım.Yalnızca cmake ile ilgili kısımda herhangi bir şey yapmadım. Şuanda derleyebiliyorum ve exe dosyası oluşturuluyor.Programı çalıştırdığımda eksik dll hatası veriyor.Bu sorunu ilgili dll dosyalarını aynı  klasöre (exenin olduğu klasöre) kopyalayarak çözdüm. Ancak bu kez program çalışmayı durdurdu diye hata alıyorum.

Sorunun sbebiyle ilgili bilgisi olan var mı?

Kaynak kod şu;

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main()
{
    Mat image;// new blank image
    image = cv::imread("C://pic.jpg",0);// read the file
    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// create a window for display.
    imshow( "Display window", image );// show our image inside it.
    waitKey(0);// wait for a keystroke in the window
    return 0;
}
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

DEno_12

#27
Vermiş olduğunuz linkte yorumları okudum biraz. Adam genelde CodeBlocks'u Mingw'siz kurun sonrasında mingw yi benim anlattığım gibi kurun diyor. Sorun yaşayanlarda sizin soruna benzer sorunlar yaşamışlar. Komple codeblocks, mingw ve path uzantılarını silip baştan kurabilir misiniz? Ya da kendi bilgisayarınızda iseniz 70 küsür mb'lık lite xp lerden birini virtual box a kurup herşeye tertemiz başlayabilirsiniz. Bu arada kusura bakmayın mesajınızı geç gördüğüm için geç yazıyorum.

Bir de unutmamak gerek. PATH eklerken eklediğiniz path'lerin sırası bile önemli. Çünkü işletim sistemi path e sırayla bakıyor.

Ayrıca size tavsiyem eğer imkanınız varsa visual studio ile devam edebilirsiniz.Resmi sitesinde güzelce anlatmışlar. Hiç mingw ye bulaşmamış olursunuz.

http://docs.opencv.org/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.html#windows-visual-studio-how-to

yldzelektronik

Alıntı yapılan: DEno_12 - 03 Haziran 2014, 03:21:34
Vermiş olduğunuz linkte yorumları okudum biraz. Adam genelde CodeBlocks'u Mingw'siz kurun sonrasında mingw yi benim anlattığım gibi kurun diyor. Sorun yaşayanlarda sizin soruna benzer sorunlar yaşamışlar. Komple codeblocks, mingw ve path uzantılarını silip baştan kurabilir misiniz? Ya da kendi bilgisayarınızda iseniz 70 küsür mb'lık lite xp lerden birini virtual box a kurup herşeye tertemiz başlayabilirsiniz. Bu arada kusura bakmayın mesajınızı geç gördüğüm için geç yazıyorum.

Bir de unutmamak gerek. PATH eklerken eklediğiniz path'lerin sırası bile önemli. Çünkü işletim sistemi path e sırayla bakıyor.

Ayrıca size tavsiyem eğer imkanınız varsa visual studio ile devam edebilirsiniz.Resmi sitesinde güzelce anlatmışlar. Hiç mingw ye bulaşmamış olursunuz.

http://docs.opencv.org/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.html#windows-visual-studio-how-to

Çok teşekkürler.Sorunu çözdüm.Küçük path sorunu ve programı codeblocks üzerinden run etme sıkıntısı dışında bütün problemleri çözdüm.İstediğim projeyi derleyebiliyorum.

Bununla alakalı yazı hazırlayacağım.Müsait ilk zamanımda.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

DEno_12

Ne demek.Çok güzel olur, elinize sağlık şimdiden.