2011-09-30 5 views
0

서명 된 char 및 unsigned char 유형은 모든 플랫폼에서 8 비트가되는 것은 아니지만 때로는 8 비트 이상인 경우도 있습니다. 그렇다면 OpenCv를 사용하면 CV_8U가 항상 8 비트인지 어떻게 확인할 수 있습니까? 8 비트 매트를 취하고 필요한 경우 CV_8SC1 요소를 uchars로 변환하고 CV_8UC1을 schar로 변환하는 짧은 함수를 작성했습니다. 이제는 플랫폼에 독립적이지 않아서 코드를 어떤 방식으로 고쳐야한다고 생각합니다.8 비트 시스템에서 CV_8U opencv의 행렬

P .: 마찬가지로 32 비트 int가없는 시스템에서도 CV_32S가 항상 int가 될 수 있습니까?

+1

필자는 걱정할 필요가 없다고 생각합니다. OpenCV가 기본 구현을 처리하도록하십시오. CHAR_BIT> 8 인 플랫폼은 다소 이상합니다 (일반적으로 DSP). sizeof (int)> 4가 다소 더 일반적이지만, OpenCV가 이것을 처리 할 것이라고 확신합니다. –

+1

실제로 OpenCV는 ia32, amd64 및 arm (2.3.0부터) 플랫폼에서만 작동 할 것을 약속합니다. 이 플랫폼들은 모두 8 비트 char과 32 비트 int를 가지고 있습니다. –

+0

@ AndreyKamaev. 그리고 schar에서 uchar 로의 변환과 viceversa에 관해서는 제가 작성한 코드에 의지 할 수 있다고 생각합니까? 모든 플랫폼이 2를 보완합니까? –

답변

1

당신은 이것을 들어 본 적이 있습니까? 아마도 cv :: Mat의 행 끝에 추가 할 수있는 패딩을 의미합니다. 패딩은 일반적으로 사용되지 않으므로 문제가되지 않습니다. 특히 인터페이스 기능을 사용하면 문제가 없습니다. 이터레이터 (c.f.). 일부 코드를 게시하면 구현에 실제로 이러한 문제가있는 경우 확인할 수 있습니다. 그들은 int, long 특정 inttypes.h에 정의 된 (예를 들어 int32_t, uint32_t)와 같은 유형이 아닌 플랫폼을, 무엇이든을 사용하기 때문에

// template methods for iteration over matrix elements. 
// the iterators take care of skipping gaps in the end of rows (if any) 
template<typename _Tp> MatIterator_<_Tp> begin(); 
template<typename _Tp> MatIterator_<_Tp> end(); 

CV_32S는 항상 32 비트 정수가됩니다.

관련 문제