2011-04-13 3 views
15

일반적으로 데이터가 const가 아닌 경우 대수 조작을 위해 그 위에 cv :: Mat 헤더를 초기화 할 수 있습니다.const 데이터 용 cv :: Mat 헤더 만들기

float awesome_data[24] = {0}; 
cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, awesome_data); 

하지만, 내 데이터는 const를 경우

const float awesome_data[24] = {0}; 
cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, awesome_data); 

에 오류가있을 것이다 : unable to convert from const void * to void *합니다. 나는 awesome_mat을 바꾸지 않을 것이라는 것을 안다, 이것을하는 제일 방법은 무엇인가?

는 현재, 나는 const를 같이 const를 캐스트없이

const float awesome_data[24] = {0}; 
cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, const_cast<float *>(awesome_data)); 
+0

와 당신이 달성하려고하는거야? – fazo

+0

오브젝트가 cv :: Mat 인 경우 선형 대수, 이미지 처리, ... 연산을 수행 할 수 있습니다. 나는 그걸로 무엇을 할 수 없습니까? :-) –

+0

나는 그것을 의미하지는 않습니다. const_cast 작품 - 당신이 원하거나 기대하는 다른 것이 있습니까? – fazo

답변

-2

내가 입력 qould 캐스팅 할 필요가 : 내가 아는 한

const float awesome_data[24] = {0}; 
Mat awesome_mat = Mat(6, 4, CV_32F, (void*)awesome_data,0); 
+0

그리고 왜이 솔루션은 const_cast <>보다 좋을까요? –

2

, OpenCV의는 const_Mat 클래스가 없습니다. 그러나 사용하여

const float awesome_data[24] = {0}; 
const cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, const_cast<float *>(awesome_data)); 

당신은 constness를 보존합니다.

+2

귀하의 게시물이 @ R1tschY의 의견과 일치하지 않는 것 같습니다. 어떤 종류의 '일관성'을 당신이 의미하는지, 누군가를 혼란스럽게 말하는지에 대해 논할 수 있습니까? – MaciekS

2

cv::Mat의 데이터는 항상 수정할 수 있습니다. 단지 매트릭스 헤더는 읽기 전용이 아닌 데이터 (Differences of using "const cv::Mat &", "cv::Mat &", "cv::Mat" or "const cv::Mat" as function parameters?)입니다

const float awesome_data[24] = {0}; 
cv::Mat awesome_mat = cv::Mat(6, 4, CV_32F, const_cast<float *>(awesome_data)).clone(); 

const cv::Mat으로 : 당신이 데이터를 복사해야 더 안전합니다

const cv::Mat mat = cv::Mat::zeros(6, 4, CV_32F); 
mat += 1; // compiles and runs fine! 
관련 문제