В стандартном кафе пример кода здесь у нас есть:
void Classifier::WrapInputLayer(std::vector<cv::Mat>* input_channels) {
Blob<float>* input_layer = net_->input_blobs()[0];
int width = input_layer->width();
int height = input_layer->height();
float* input_data = input_layer->mutable_cpu_data();
for (int i = 0; i < input_layer->channels(); ++i) {
cv::Mat channel(height, width, CV_32FC1, input_data);
input_channels->push_back(channel);
input_data += width * height;
}
}
Если я использую cv::cuda::GpuMat
, могу ли я переписать код для этого?
void Classifier::WrapInputLayer(std::vector<cv::cuda::GpuMat>* input_channels) {
Blob<float>* input_layer = net_->input_blobs()[0];
int width = input_layer->width();
int height = input_layer->height();
float* input_data = input_layer->mutable_gpu_data();
for (int i = 0; i < input_layer->channels(); ++i) {
cv::cuda::GpuMat channel(height, width, CV_32FC1, input_data); // OK I hope?
input_channels->push_back(channel);
input_data += width * height;
}
}
Здесь мы используем этот GpuMat
конструктор для инициализации указателя памяти графического процессора . Затем Preprocess()
можно обновить, чтобы использовать соответствующие версии графического процессора интерфейса OpenCV.
Есть ли какие-нибудь подводные камни, которые меня ожидают?
ПРИМЕЧАНИЕ : Я только что внес изменение, и оно работает, как и ожидалось, но при проверке через Google не хватает информации по этой теме, поэтому, возможно, это может служить каноническим примером.