Tôi muốn khai báo, điền, truy cập Ma trận đa chiều trong OpenCV (C++) tương thích với không gian tên cv. Tôi không tìm thấy ví dụ nào về chúng nhanh chóng và dễ dàng. bạn có thể vui lòng giúp tôi không?Dữ liệu đa chiều trong ma trận trong OpenCV với C++
Trả lời
Dưới đây là ví dụ ngắn từ tài liệu NAryMatIterator; nó cho thấy làm thế nào để tạo, cư, và xử lý một ma trận đa chiều trong OpenCV:
void computeNormalizedColorHist(const Mat& image, Mat& hist, int N, double minProb)
{
const int histSize[] = {N, N, N};
// make sure that the histogram has a proper size and type
hist.create(3, histSize, CV_32F);
// and clear it
hist = Scalar(0);
// the loop below assumes that the image
// is a 8-bit 3-channel. check it.
CV_Assert(image.type() == CV_8UC3);
MatConstIterator_<Vec3b> it = image.begin<Vec3b>(),
it_end = image.end<Vec3b>();
for(; it != it_end; ++it)
{
const Vec3b& pix = *it;
hist.at<float>(pix[0]*N/256, pix[1]*N/256, pix[2]*N/256) += 1.f;
}
minProb *= image.rows*image.cols;
Mat plane;
NAryMatIterator it(&hist, &plane, 1);
double s = 0;
// iterate through the matrix. on each iteration
// it.planes[*] (of type Mat) will be set to the current plane.
for(int p = 0; p < it.nplanes; p++, ++it)
{
threshold(it.planes[0], it.planes[0], minProb, 0, THRESH_TOZERO);
s += sum(it.planes[0])[0];
}
s = 1./s;
it = NAryMatIterator(&hist, &plane, 1);
for(int p = 0; p < it.nplanes; p++, ++it)
it.planes[0] *= s;
}
Ngoài ra, hãy kiểm tra cv::compareHist
chức năng cho một ví dụ sử dụng các NAryMatIterator
here.
Để tạo ra một ma trận đa chiều đó là kích thước 100x100x3, sử dụng phao, một kênh, và với tất cả các yếu tố khởi tạo đến 10 bạn viết như thế này:
int size[3] = { 100, 100, 3 };
cv::Mat M(3, size, CV_32FC1, cv::Scalar(10));
Để lặp qua và sản lượng các yếu tố trong ma trận bạn có thể làm:
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
for (int k = 0; k < 3; k++)
std::cout << M.at<cv::Vec3f>(i,j)[k] << ", ";
Tuy nhiên, hãy cẩn thận của những rắc rối với việc sử dụng ma trận đa chiều như tài liệu ở đây: How do i get the size of a multi-dimensional cv::Mat? (Mat, or MatND)
Chính xác những gì tôi đang tìm kiếm, đơn giản và tiện lợi! Cảm ơn. –
- 1. truy cập ma trận phụ của Mat đa chiều trong OpenCV
- 2. Thêm hàng vào ma trận trong OpenCV
- 3. chuyển đổi giữa ma trận OpenCV và ma trận int
- 4. Kích thước của ma trận OpenCV
- 5. Cách lấy ma trận điểm ảnh và ma trận định hình lại trong openCV
- 6. Tạo khung dữ liệu từ ma trận trong R
- 7. Ma trận và cơ sở dữ liệu
- 8. Ma trận tương tác hai chiều trong R
- 9. Thư viện C++ để đọc mã ma trận dữ liệu
- 10. Ma trận của Ma trận trong Perl
- 11. Gnuplot - dữ liệu csv ma trận splot
- 12. Chuyển đổi vòng lặp ma trận OpenCV sang JavaCV
- 13. Opencv nhân vô hướng và ma trận
- 14. OpenCV Thêm cột vào ma trận
- 15. In nội dung ma trận opencv trong Java
- 16. C++ đa chiều mảng khởi
- 17. Ma trận trong Mục tiêu-C
- 18. In ra các giá trị của ma trận (Mat) trong OpenCV C++
- 19. Đọc danh sách phẳng thành mảng đa chiều/ma trận trong python
- 20. Điều Hành + cho ma trận trong C++
- 21. tạo ma trận máy ảnh opencv cho iPhone 5 resolvepnp
- 22. Mathematica động để dữ liệu ma trận lô
- 23. OpenCV: xoay/dịch vector sang ma trận OpenGL modelview
- 24. Làm thế nào để nối hai ma trận trong Python OpenCV?
- 25. Ma trận chiếu ma trận trong Xna/OpenGL - 3D
- 26. Lập chỉ mục một chiều numpy.array làm ma trận
- 27. writeClipboard cho ma trận hoặc khung dữ liệu?
- 28. Phân tích dữ liệu Twitter - Lỗi trong ma trận tài liệu thuật ngữ
- 29. vectơ cột để ma trận trong R
- 30. Ma trận ghép nối trong R
vì vậy, một mảng 3 chiều nên là một cái gì đó như thế này phải không? int sz [] = {3, 3, 3}; Mat tích lũy (3, sz, CV_8U, Scalar :: tất cả (0)); accumarray.at (0, 1, 2) = 20; –
garak
Có. Điều đó sẽ làm việc tốt. – mevatron
Vâng, có vẻ như phương pháp trên không hoạt động cho Ma trận 4 chiều. Bạn có biết lý do không? – garak