0
我有一個opencv 3通道墊,每個像素包含一個3D點。 現在我想複製這個墊(點)到VTK點,然後polydata可視化它。 有一個示例here顯示了這一點,但我想直接使用memcpy將cv :: Mat複製到vtkPoints。使用GetVoidPointer方法memcpy vtkPoints
我所做的:
// Create colored point clodu in opencv format
cv::Mat cld_cv = cv::Mat::zeros(1, 3, CV_32FC3);
int num_points = cld_cv.cols * cld_cv.rows;
// Fill cld_cv code here
// .....
vtkSmartPointer<vtkPoints> points =
vtkSmartPointer<vtkPoints>::New();
points->SetNumberOfPoints(num_points);
::memcpy(points->GetVoidPointer(0), cld_cv.data, sizeof(float) * num_points * 3);
vtkSmartPointer<vtkPolyData> pointsPolydata =
vtkSmartPointer<vtkPolyData>::New();
pointsPolydata->SetPoints(points);
// Normal VTK pipeline as shown in the example
但是我只能看到1點,這似乎是在原點。 請指出我犯錯的地方。
'uchar * cv :: Mat :: data'似乎仍然保留在Cv 3.1中。 – mainactual
我使用OpenCV 2.4.11,但是@mainactual表示它也應該在OpenCV3中可用。我會測試我的情況下墊子是否連續。謝謝 –