OpenCV에서는 Mat 객체에서 데이터를 얻는 것이 초보자에게 어려울 수 있습니다. 이번 글에서는 Mat를 배열이나 벡터로 변환하는 과정을 살펴봅니다.
직접 변환
Mat의 메모리가 연속적이라면 1D 배열로 직접 변환이 가능합니다. :
<code class="cpp">std::vector<uchar> array(mat.rows * mat.cols * mat.channels()); if (mat.isContinuous()) array = mat.data;</code>
행별 변환
비연속 Mats의 경우 2D 배열을 생성하려면 행별 액세스가 필요합니다.
<code class="cpp">uchar **array = new uchar*[mat.rows]; for (int i = 0; i < mat.rows; ++i) array[i] = new uchar[mat.cols * mat.channels()]; for (int i = 0; i < mat.rows; ++i) array[i] = mat.ptr<uchar>(i);</code>
std::Vector를 사용한 단순화된 접근 방식
std::Vector의 경우 변환이 더 간단해집니다.
<code class="cpp">std::vector<uchar> array; if (mat.isContinuous()) { array.assign(mat.data, mat.data + mat.total()*mat.channels()); } else { for (int i = 0; i < mat.rows; ++i) { array.insert(array.end(), mat.ptr<uchar>(i), mat.ptr<uchar>(i)+mat.cols*mat.channels()); } }</code>
Data 연속성 고려 사항
Mat 데이터 연속성은 모든 데이터가 메모리에서 연속되어 있음을 보장합니다.
위 내용은 OpenCV 매트를 배열이나 벡터로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!