C++을 사용하고 있으며 이미지 데이터의 배열이 void * 있습니다. 나는 그것이 RGB 픽셀 값의 배열이라는 것을 알았고 결과 이미지의 너비와 높이에 관한 정보를 가지고있다. 각 픽셀 값은 인터리빙 된 R, G 및 B 정수 (즉, 123456 = R : 12, G : 34, B : 56)의 정수입니다. 이 배열을 OpenCV Mat 이미지로 변환해야합니다. 나는이 온라인의 많은 예를 발견했지만 아무도 성공하지 못했다.C++ - RGB 1 차원 배열을 OpenCV 매트로 변환
cv::Mat image = cv::Mat(width*height*4, 1, CV_8U, (unsigned*)data);
cv::Mat reshaped = image.reshape(0, height);
cv::imwrite("Test.jpg", reshaped);
위의 코드는 그레이 스케일, 내 컬러 이미지의 가늘고 긴 버전을 저장 : 여기에 나를 위해 작업에 가장 가까운왔다 코드의 축약 버전입니다. 나는 또한 시도했다 :
cv::Mat image = cv::Mat(width, height, CV_8U, (unsigned*)data);
cv::imwrite("Test.jpg", image);
위의 코드는 내 컬러 이미지의 잘게 잘린 회색 버전을 저장합니다. 내가 시도한 다른 것 (CV_16U, CV_32F, (byte *) 데이터 등)은 방금 검은 색 이미지를 반환했습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
또는 for 루프를 사용하지 않고 C++을 사용하여 배열에서 이미지를 저장하는 더 쉬운 방법을 찾을 수 없기 때문에 OpenCV 만 사용하고 있습니다. 나는 모든 픽셀을 반복하고 개별적으로 저장함으로써 PPM 이미지를 저장하는 데 성공했지만, 이제는 더 효율적인 것이 필요합니다. 배열에서 이미지를 저장하는 다른 방법이 있다면, 대신 그것을 사용하게되어 기쁩니다.
'데이터'에 대한 설명은 다소 혼란 스럽습니다. 좀 더 명확히 할 수 있습니까? 각 채널 (단일 R)은 정수 (int)입니까? 또는 각각은 서명되지 않은 char이며, 함께 int (덧붙인 패딩을위한 unsigned char 한 개와 함께)를 만듭니다. – cxyzs7