OpenCV C ++에서 (Mat) 행렬의 값을 인쇄합니다.
cout을 사용하여 OpenCV의 행렬 값을 콘솔에 덤프하고 싶습니다. 나는 OpenvCV의 유형 시스템이나 C ++ 템플릿을이 간단한 작업을 수행하기에 충분히 잘 이해하지 못한다는 것을 금방 알게되었습니다.
독자가 매트를 인쇄하는 작은 기능이나 코드 스 니펫을 게시 (또는 안내해 주실 수 있습니까)?
안부, Aaron
추신 : 이전 CvMat 인터페이스와 달리 최신 C ++ Mat 인터페이스를 사용하는 코드가 우선적입니다.
OpenCV C ++의 "Mat"개체 (CvMat 개체가 아님)에서 행렬 요소 액세스에 대한 첫 번째 답변을 참조하십시오.
그런 다음 cout << M.at<double>(0,0);
0,0이 아닌 모든 요소를 반복합니다.
또는 새로운 C ++ 인터페이스를 사용하는 것이 더 좋습니다 ( SSteve 덕분에 ).
cv::Mat M;
cout << "M = "<< endl << " " << M << endl << endl;
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <iomanip>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
double data[4] = {-0.0000000077898273846583732, -0.03749374753019832, -0.0374787251930463, -0.000000000077893623846343843};
Mat src = Mat(1, 4, CV_64F, &data);
for(int i=0; i<4; i++)
cout << setprecision(3) << src.at<double>(0,i) << endl;
return 0;
}
를 사용하는 matrix.at<type>(x,y)
것이 Mat 개체를 반복하는 가장 좋은 방법은 아니라고 생각 합니다! 내가 올바르게 기억 matrix.at<type>(x,y)
하면 행렬을 호출 할 때마다 행렬의 처음부터 반복됩니다 (하지만 틀릴 수도 있습니다). 나는 사용하는 것이 좋습니다cv::MatIterator_
cv::Mat someMat(1, 4, CV_64F, &someData);;
cv::MatIterator_<double> _it = someMat.begin<double>();
for(;_it!=someMat.end<double>(); _it++){
std::cout << *_it << std::endl;
}
opencv3를 사용하는 경우 다음과 같이 Mat를 인쇄 할 수 있습니다 python numpy style
.
Mat xTrainData = (Mat_<float>(5,2) << 1, 1, 1, 1, 2, 2, 2, 2, 2, 2);
cout << "xTrainData (python) = " << endl << format(xTrainData, Formatter::FMT_PYTHON) << endl << endl;
아래와 같이 출력하면 더 읽기 쉽게 확인할 수 있습니다 . 자세한 내용 은 여기 를 참조 하세요 .
그러나 대부분의 경우 Mat의 모든 데이터를 출력 할 필요는 없으며 0 ~ 2 행과 같은 행 범위로 출력 할 수 있습니다.
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <iomanip>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//row: 6, column: 3,unsigned one channel
Mat image1(6, 3, CV_8UC1, 5);
// output row: 0 ~ 2
cout << "image1 row: 0~2 = "<< endl << " " << image1.rowRange(0, 2) << endl << endl;
//row: 8, column: 2,unsigned three channel
Mat image2(8, 2, CV_8UC3, Scalar(1, 2, 3));
// output row: 0 ~ 2
cout << "image2 row: 0~2 = "<< endl << " " << image2.rowRange(0, 2) << endl << endl;
return 0;
}
아래와 같이 출력 :
참조 URL : https://stackoverflow.com/questions/7970988/print-out-the-values-of-a-mat-matrix-in-opencv-c
'development' 카테고리의 다른 글
http 프록시는 어떻게 작동합니까? (0) | 2021.01.07 |
---|---|
Java에서 두 세트의 교차점을 효율적으로 계산합니까? (0) | 2021.01.07 |
ScheduledExecutorService에서 작업을 제거하는 방법은 무엇입니까? (0) | 2021.01.07 |
ConfigureAwait (false)와 Task.Run 사용의 차이점은 무엇입니까? (0) | 2021.01.07 |
Linux 플랫폼 드라이버와 일반 장치 드라이버의 차이점은 무엇입니까? (0) | 2021.01.07 |