Bugün karsilastim ve not etmek istedim.
Önceden 64 bit altinda çalistirdigim bir VS uygulamasini 32 bit ile çalistirmak istedim, gerekli 32 bit dll’lerini ekledim&degistirdim debug modunu x86 ya ayarladim vs fakat uygulama bu hatayi verdi : “The application was unable to start correctly (0xc000007b). Click OK to close the application“. Biraz ugrastiktan sonra yine benim gibi bu sorunu yasamis ve blogunda yazmis birisi sayesinde çözebildim. Bu hata 32bit&64bit çikmazlarinda aliniyor. Yani sizin programiniz 32 bit mimarisinde fakat 64 bit dll’ler kullanmaya çalisiyor. Iste bu durumda bu hatayi aliyorsunuz. Peki çözüm ?
Programiniz hangi dll leri kullaniyor, kullanmaya çalisiyor ve bu hatayi aliyor bunu görmek lazim. Bunun için de bir program var, hayat kurtaran cinsten : Dependency walker. Buradan indirebilirsiniz.
Program ile .exe programini açin, programinizin kullandigi dll’ler, bu dll’lerin kullandigi dll’ler vs hepsi görüntülenecektir. Sorun ise, mesela benim bilgisayarda tbb_debug.dll dosyasının 64 bit olması. Şu şekildeki gibi sorunu görüntüleybilirsiniz :

Bu 64 bit dll dosyasını 32 bit ile değiştirince sorunumuz çözülüyor. Siz de kendinize göre sorununuzu çözünüz🙂

Yıllar sonra gelen edit: Bu tür bir sorun muhtemelen sisteminizde, eğer farkında olmadan programa yanlış dll’i sunmuyorsanız, belirtilen dll dosyalarının karışmasından oluyor olabilir. Uygulama geliştirme IDEnizin (Visual Studio vs) kendi  environment tanımlarına, ürettiği exe dosyasının olduğu dizine ve sisteminizin path’inde (Bilgisayarım -> Özellikler -> Gelişmiş sistem ayarları ->Ortam değişkenleri) belirtilmiş  dll’lere  dikkat ediniz, bunların karışmış olması sorunun muhtemel sebebi. IDE’lerde uygulama run edildiğinde “modules” gibi bir isimde, o anda belleğe yüklenen dll vs leri gösteren bir pencere vardır, ordan neyi nerden alıyor takip edebilirsiniz.

Merhabalar,
Benim gibi işin başında Visual Studio ile  OpenCV  konfigürasyonunu yapmakta sıkıntı çekenler olabileceğini düşünerekten(Aslında  hep unuttuğum için kendime yazdım galiba da neyse…) bu yazıyı hazırlamak istedim.

Birkaç çeşit konfigürasyon var ama ben kendi kullandığım yöntemi tarif edeceğim. Konfigurasyon ayarlarını ‘Property Sheet’ özelliği ile yaparsak, başka projelerde bu dosyayı import ederek aynı ayarları kullanabiliriz.  Ben bu yöntem ile VS2010 için şu an kullandığım OpenCVnin son sürümü olan 2.3.1 veriyonunun kurulumunu anlatacağım.

Visual Studio 2010’u kurun, OpenCV’yi indirin dememe gerek yok sanırım (OpenCV’yi C diskine açarsak daha iyi olur gibi(“C:\OpenCV-2.3.1\”) ).

Here we go…

VS2010 u açalım ve New Project -> Empty Project’i seçelim, ismini verip projeyi oluşturalım.

Şimdi View->Other Windows->Property Manager penceresini açalım.  Win32 için Debug ve Release sekmelerini göreceksiniz. Aşağıdaki alıntıdaki gibi default olarak 32bit Windows için ayarlar gelmiştir. Fakat benim gibi 64 bit Windows kullananlar için birkaç şey daha yapmamız gerek. 64 bit kullananlarla devam ediyoruz, 32bitçiler aşağıdaki mavi yazılmış kısmı atlayarak devam edebilirler.

Build->Configuration Manager kısmına gelip Active Solution Platform altından New’i seçelim. Ardından açılan pencerede new platform olarak x64 ü, seçip ok diyelim.  Debug|Win32 ve Release|Win32 sekmelerini kullanmayacağımız için silebiliriz.

Şimdi projemize bir Property Sheet ekleyeceğiz. Property manager altındaki Debug|Win32’ye(64 bit için Debug|x64) sağ tıklayarak “Add New Project Property Sheet” i seçelim ve açılan pencereye bir isim verip Add butonuna tıklayalım. Property Manager-Debug altında yeni oluşturduğumuz Property Sheet’imizin geldiğini göreceksiniz.

Şimdi oluşturmuş olduğumuz bu Propert Sheet’imize çift tıklayalım. Property Pages açılacak. Buradan OpenCV kütüphanemizi VS ye link ederek göstereceğiz.

Common Properties->C/C++->General->Additional Include Directories altına C:\OpenCV-2.3.1\build\include yolunu ekleyelim.

Common Properties->Linker->General altındaki “Additional Library Directories” kısmına “C:\OpenCV-2.3.1\build\x64\vc10\lib” yolunu ekleyelim. Tabi 32 bit kullananlar için C:\OpenCV-2.3.1\build\x86\vc10\lib olacaktır.

Common Properties->Linker->Input altından da Additional Dependencies kısmına aşağıdaki lib dosyalarını ekleyelim:

opencv_calib3d231d.lib
opencv_contrib231d.lib
opencv_core231d.lib
opencv_features2d231d.lib
opencv_flann231d.lib
opencv_gpu231d.lib
opencv_haartraining_engined.lib
opencv_highgui231d.lib
opencv_imgproc231d.lib
opencv_legacy231d.lib
opencv_ml231d.lib
opencv_objdetect231d.lib
opencv_ts231d.lib
opencv_video231d.lib

Aslında bu dosyaların hepsine ihtiyacımız yok, Eğer hangisini kullanacağımızı biliyorsak, ihtiyacımız olanı eklememiz yeterlidir.

Evet, OpenCV konfigürasyonunu neredeyse bitirdik.Şimdi çalışıp çalışmadığını görmek için küçük bir deneme uygulaması yapalım.

Solution Explorer altından Source File’a sağ tıklayıp Add->New Item altından bir isim vererek C++File ekleyelim ve buna aşağıdaki basit kodumuzu yazalım :

Bu kod gösterdiğimiz yoldaki image dosyasını görüntüleyecektir(Kod içerisindeki yol için kendi bilgisayarınızda bir image dosyası gösteriniz.)

#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char* argv[])
{
IplImage* img = cvLoadImage( “C:\\1.jpg” );
cvNamedWindow( “Example1”, CV_WINDOW_AUTOSIZE );
cvShowImage(“Example1”, img);
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( “Example1” );
return 0;
}

Eksik bir dll dosyamız olduğundan bir hata alacağız. Bunu çözmek için, projenizin execute dosyasının bulunduğu(Benim için C:\Users\Horizon\Documents\Visual Studio 2010\Projects\hello_opencv\x64\Debug) dizinine C:\OpenCV-2.3.1\build\x64\vc10\bin yolunun altındaki sonu d ile biden dosyaları(yani ..d.dll şeklindeki dosyaları. d harfi debug yerinedir) aşağıdaki gibi eklemeliyiz.

Bu işlemi de yaptıktan sonra tekrar derlediğimizde, eğer buraya kadar yaptıklarınızda bir hata yoksa programın çalışarak aşağıdaki alıntıda görüldüğü gibi resmi açması gerekir.

Şimdilik OpenCVyi kullanabilir hale gelmiş olduk. Diğer OpenCV denemelerimizle görüşmek üzere😉