这篇文章会更新一些我在使用mxnet的c++过程中的一些记录,结合mxnet的c++接口学习c++。方便以后查阅使用。
迭代器iterator的用法
std::string para_path = "D:/Workspace/FaceProject-master/models/centerface.params";
std::map<std::string, mxnet::cpp::NDArray>params;
std::map<std::string, mxnet::cpp::NDArray>::iterator it;//定义一个迭代器it,it是指向pair<std::string, mxnet::cpp::NDArray>类型的指针
NDArray::Load(para_path, nullptr, ¶ms);//注意Load最后一个参数放params的地址
it = params.begin();
//params.begin()为params第一个元素的地址
//params.end()为params最后一个元素的下一个元素的地址
while (it != params.end())
{
cout << it->first.substr(4,it->first.size()-4)<< endl;//substr(第一个字符位置,输出总字符的长度)
it++;
}
auto的用法
std::string para_path = "D:/Workspace/FaceProject-master/models/centerface.params";
std::map<std::string, mxnet::cpp::NDArray>params;
NDArray::Load(para_path, nullptr, ¶ms);
for (const auto&pair : params)//pair为params中每一个键值对的引用,并且为const型,即其值不能改变
{
cout << pair.first << endl;
}
opencv的通道合并与分离
cv::Mat src = imread("D:/Workspace/COCO_test2014_000000001730.jpg", cv::IMREAD_COLOR);
cv::imshow("src", src);
std::vector<cv::Mat> bgrChannels(3);
cv::split(src, bgrChannels);
cv::Mat blank_ch, fr,fg,fb;
blank_ch = cv::Mat::zeros(cv::Size(src.cols, src.rows), CV_8UC1);
std::vector<cv::Mat> channels_r;
channels_r.push_back(blank_ch);
channels_r.push_back(blank_ch);
channels_r.push_back(bgrChannels[2]);
cv::merge(channels_r, fr);
cv::imshow("R", fr);
std::vector<cv::Mat>channels_g;
channels_g.push_back(blank_ch);
channels_g.push_back(bgrChannels[1]);
channels_g.push_back(blank_ch);
cv::merge(channels_g, fg);
cv::imshow("G", fg);
std::vector<cv::Mat>channels_b;
channels_b.push_back(bgrChannels[0]);
channels_b.push_back(blank_ch);
channels_b.push_back(blank_ch);
cv::merge(channels_b, fb);
cv::imshow("B", fb);
cv::waitKey(0);
cv::destroyAllWindows();