在处理opencv Mat矩阵的行时,range-based for loop和std::transform的作用并不相同。当使用range-based for loop时,代码会对每一行进行迭代,以opencv Mat类型返回。而当使用std::transform和输入/输出迭代器时,代码会对每一行进行迭代,以常规C++类型返回。这意味着在处理opencv Mat矩阵的行时,应该优先使用range-based for loop而不是std::transform和输入/输出迭代器。
以下是演示如何处理opencv Mat矩阵的行的示例代码:
cv::Mat myMat(10, 10, CV_8UC1, cv::Scalar(0));
// 遍历opencv Mat矩阵的行
for (int i = 0; i < myMat.rows; ++i) {
cv::Mat row = myMat.row(i);
// 对每一行进行处理
// ...
}
// 使用std::for_each处理每一行并用lambda表达式返回C++类型
std::vector> rows;
std::for_each(myMat.begin(), myMat.end(), [&rows](uint8_t* ptr) {
std::vector row(ptr, ptr + myMat.cols);
rows.push_back(row);
});