0

OSX 10.7.5でOpenCV(2.4.3)のbrewインストールを実行しています。OpenEXR(1.7.0)のbrewインストールと、それらのソースをダウンロードして1.7.1を直接コンパイルすることの両方を試しましたが、そのインターフェイスにいくつかの変更があった可能性があります。OpenEXRの両方のバージョンで、プレビューでEXRファイルを開くことができます。OpenEXRを新しくインストールするたびに、戻ってOpenCVをアンインストールし、再インストールしました。OpenCVは正しいOpenEXRを検出しています:

--   Media I/O: 
--     ZLib:                        /usr/lib/libz.dylib (ver 1.2.5)
--     JPEG:                        /usr/local/lib/libjpeg.dylib (ver 80)
--     PNG:                         /usr/X11/lib/libpng.dylib (ver 1.5.4)
--     TIFF:                        /usr/local/lib/libtiff.dylib (ver 42 - 4.0.3)
--     JPEG 2000:                   /usr/local/lib/libjasper.dylib (ver 1.900.1)
--     OpenEXR:                     build (ver 1.7.1)

Pythonでcv2を介してEXRを読み書きしようとすると、次のようになります。

terminate called throwing an exceptionAbort trap:6

これは完全なクラッシュレポートです:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000

Application Specific Information:
abort() called
objc[52394]: garbage collection is OFF
terminate called throwing an exception

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fff8e43a82a __kill + 10
1   libsystem_c.dylib               0x00007fff8e012a9c abort + 177
2   libc++abi.dylib                 0x00007fff8d2607bc abort_message + 214
3   libc++abi.dylib                 0x00007fff8d25dfcf default_terminate() + 28
4   libobjc.A.dylib                 0x00007fff944501cd _objc_terminate + 114
5   libc++abi.dylib                 0x00007fff8d25e001 safe_handler_caller(void (*)()) + 11
6   libc++abi.dylib                 0x00007fff8d25e05c std::terminate() + 16
7   libc++abi.dylib                 0x00007fff8d25f152 __cxa_throw + 114
8   libopencv_highgui.2.4.dylib     0x000000010dc49d44 Iex::throwErrnoExc(std::string const&, int) + 3492
9   libopencv_highgui.2.4.dylib     0x000000010dc4a8fc Iex::throwErrnoExc(std::string const&) + 24
10  libopencv_highgui.2.4.dylib     0x000000010dc4c5e7 IlmThread::Semaphore::Semaphore(unsigned int) + 67
11  libopencv_highgui.2.4.dylib     0x000000010dc4b969 IlmThread::ThreadPool::Data::Data() + 27
12  libopencv_highgui.2.4.dylib     0x000000010dc4be74 IlmThread::ThreadPool::ThreadPool(unsigned int) + 46
13  libopencv_highgui.2.4.dylib     0x000000010dc4c260 IlmThread::ThreadPool::globalThreadPool() + 46
14  libopencv_highgui.2.4.dylib     0x000000010dc696aa Imf::globalThreadCount() + 9
15  libopencv_highgui.2.4.dylib     0x000000010dc3e38b cv::ExrDecoder::readHeader() + 35
16  libopencv_highgui.2.4.dylib     0x000000010dc2f54a _ZN2cvL7imread_ERKSsiiPNS_3MatE + 249
17  libopencv_highgui.2.4.dylib     0x000000010dc2f3d4 cv::imread(std::string const&, int) + 132
18  cv2.so                          0x000000010d4d28f4 _ZL15pyopencv_imreadP7_objectS0_S0_ + 332
19  org.python.python               0x000000010d19ed77 PyEval_EvalFrameEx + 13861
20  org.python.python               0x000000010d1a1cd8 PyEval_EvalCodeEx + 1996
21  org.python.python               0x000000010d1a1d4d PyEval_EvalCode + 54
22  org.python.python               0x000000010d1b908f 0x10d117000 + 663695
23  org.python.python               0x000000010d1ba671 PyRun_InteractiveOneFlags + 517
24  org.python.python               0x000000010d1ba79a PyRun_InteractiveLoopFlags + 214
25  org.python.python               0x000000010d1ba7fc PyRun_AnyFileExFlags + 63
26  org.python.python               0x000000010d1ca2af Py_Main + 2715
27  org.python.python               0x000000010d10fe88 0x10d10f000 + 3720

具体的には、これらのエラーは次の結果です。

import cv2
cv2.imread("image.exr")

助言がありますか?

編集:OpenCV Webサイトから2.4.3のソースコードを新たにコンパイルしようとしましたが、まったく同じ問題が発生しています。

4

2 に答える 2

3

私は非常によく似た問題を抱えていて、ライブラリをデバッグし、ソースを調べて、問題の原因を見つけました。

これは、OpenEXRライブラリが実際にはサポートされていないときにSysVセマフォを使用しようとしたことが原因です。EXRには、サポートライブラリでこれを使用するかどうかを決定するCMakeLists.txtための存在を探す行があります。semaphore.h

ただし、Darwinにはレガシーとしてセマフォのみが含まれており、sem_init()常に返さENOSYSれます。つまり、実装されていません。これにより、セマフォコンストラクターはコンストラクターで例外をスローします。これは、EXRヘッダーを解析しようとしたときにトリガーされます。

解決策は、ファイルを編集しilmBaseConfig.h、セマフォ行を次のように変更することです。

#undef HAVE_POSIX_SEMAPHORES

次に、再構築して再インストールします。

EXRライブラリは、セマフォの独自の実装を使用し、EXRのロードは正常に機能します。

于 2013-02-24T11:11:07.810 に答える
0

OpenCV 2.4.2 にロールバックすることでこれを解決しました。OpenEXR 1.7.1 が 2.4.3 ディストリビューションにバンドルされているようですが、機能していないようです。さらに、2.4.3 は以前のバージョンの OpenEXR を検出できないようです。

于 2013-01-18T19:51:32.960 に答える