2011-08-03 18 views
10

Unix'ten bir OpenCV 2.2 uygulaması yüklüyorum (bu) Windows 7 64- bit ve ben cv :: imwriteOpenCV im2rite 2.2 mesajıyla istisna neden olur "OpenCV Hatası: Belirtilmemiş uzantı için bir yazarı bulamadım. Belirtilmemiş" Windows 7

denir aşağıdaki özel durumu alıyorsunuz "OpenCV hata: bilinmeyen fonksiyonunda belirtilmemiş hata (belirtilen uzatılması için bir yazar bulamadım), dosya highgui \ src \ loadsave.cpp"

Orijinal unix uygulaması Mac ve Linux kutularında iyi çalışıyor.

Windows'da bu çalışmayı yapan kitaplık veya derleyici yapılandırmasının eksik olabileceğini herhangi bir kişi biliyor mu?

GÜNCELLEME: pencereler için OpenCV sitesinden v2.2 için

  • İndirilen ikilileri:

    Ben OpenCV yayınlanmasını sağlamak için aşağıdaki şeyler yaptılar. Orijinal uygulama kullandığı için 2.2 kullanıyorum ve bu aşamada yapmamı karmaşıklaştırmak istemiyorum.

  • Bir .png dosyasına yazmayı deniyorum. OpenCV koduna baktım ve Pngs veya jpegs gibi Encoder'lar için harici lib'lerin gerekliliğini fark ettim, bu yüzden .pm'ye yazmayı denedim, .pmp denemeye gerek yok, ama aynı hatayı alıyorum.
  • Kullanımımın bir örneği cv :: imwrite ("out.png", cv_scaled);

      : cv_scaled biçimi CV_32FC1 ile :: Mat tipi cv olduğu
    • bu sorular ortaya çıkardığını çalışmıyor özdeş kod unix

    gerçeği .bmp veya Ppm içinde çalışıyor unutmayınız

  • Bu çok basit formatlar neden çalışmıyor?
  • Yüklü Encoder'ların programlı olarak listesini görmenin bir yolu var mı?

Bu sorunun hatalarını ayıklamama yardımcı olan tür yardımlarınız için tekrar teşekkür ederiz.

+0

+1()' OpenCV 2.3 benim WinXP kutuyu VS 2005 tarihinde. – karlphillip

+0

Aynı sorunu yaşadım ve hata ayıklama yaparken OpenCV'den sürüm kitaplıkları kullanıyordum. Kütüphaneleri hata ayıklamak için çözdüm ve problemleri çözdüm. Benim yaptığım gibi aynı tür bir hata yaptıysa. – MeM

cevap

9

Geçerli OpenCV yüklemeniz, diskte oluşturmaya çalıştığınız dosya biçimini desteklemiyor.

Dosyanın uzantısının doğru olup olmadığını kontrol edin. Öyleyse, OpenCV'yi yeniden derlemeniz ve bu formata destek eklemeniz ve muhtemelen eksik olan kitaplıkları yüklemeniz gerekir.

Daha fazla bilgi olmadan söylenebilecek her şey bu kadar.

DÜZENLEME:

Ayrıca aşağıdaki geçici kullanarak sona OpenCV (VS2005 üzerinde v2.3) C++ arabirimi kullanan bir uygulama yapı başarısız olarak C türlerine C++ türleri dönüştürmek gerektiğinde.

IplImage* den cv::Mat dönüştürmek için oldukça yalındır:

IplImage* ipl_img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_UNCHANGED); 
Mat mat_img(ipl_img); 

imshow("window", mat_img); 

IplImage* için cv::Mat çok açık değildir dönüşüm, ama aynı zamanda basit ve hile bir IplImage yerine IplImage* a kullanmaktır: OpenCV 2.2 API itibaren

IplImage ipl_from_mat((IplImage)mat_img); 

cvNamedWindow("window", CV_WINDOW_AUTOSIZE); 
// and then pass the memory address of the variable when you need it as IplImage* 
cvShowImage("window", &ipl_from_mat); 
+0

Teşekkür @karlphillip - Ben bile() 'OpenCV 2.3 ile WinXP'de bir JPG yüklemek için' imread alamayan benim kullanım – CVertex

+0

hakkında daha fazla ayrıntı içerecek şekilde soruyu güncelledik. LOL. Bunu imwrite() 'ye almadan önce çözmeliyim. Bulgularınızı bize bildirin. – karlphillip

+0

Uygulamanız referans olarak hangi kütüphaneler (libs/dlls)? – CVertex

0

:

The function imwrite saves the image to the specified file. The image format is chosen based on the filename extension, see imread for the list of extensions. Only 8-bit (or 16-bit in the case of PNG, JPEG 2000 and TIFF) single-channel or 3-channel (with ‘BGR’ channel order) images can be saved using this function. If the format, depth or channel order is different, use Mat::convertTo , and cvtColor to convert it before saving, or use the universal XML I/O functions to save the image to XML or YAML format.

Daha şans kaydetmeden önce 8 veya 16 bite dönüştürüyoruz.END_STRONG olabilir.

Ancak hatta tek kanallı 8 bitlik dosyalarla ben bmp çalıştığını jpg veya png dosyaları kurtarmaya çalışırken bilinmeyen uzatma hatalar vardı ama bulduk.

4

cvSaveImage("test.jpg", &(IplImage(image))); 

yerine

imwrite("test.jpg", image); 

Bu kullandığınız sürümde a known bug olduğunu deneyin. Ayrıca imread `ne oluyor