Looks like something automatically added tabs back in after I already fixed the white space. :/
This commit is contained in:
parent
3efe131480
commit
e4184195a2
@ -7,46 +7,46 @@
|
|||||||
#include <thrust/device_ptr.h>
|
#include <thrust/device_ptr.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@Brief step_functor is an object to correctly step a thrust iterator according to the stride of a matrix
|
@Brief step_functor is an object to correctly step a thrust iterator according to the stride of a matrix
|
||||||
*/
|
*/
|
||||||
//! [step_functor]
|
//! [step_functor]
|
||||||
template<typename T> struct step_functor : public thrust::unary_function<int, int>
|
template<typename T> struct step_functor : public thrust::unary_function<int, int>
|
||||||
{
|
{
|
||||||
int columns;
|
int columns;
|
||||||
int step;
|
int step;
|
||||||
int channels;
|
int channels;
|
||||||
__host__ __device__ step_functor(int columns_, int step_, int channels_ = 1) : columns(columns_), step(step_), channels(channels_) { };
|
__host__ __device__ step_functor(int columns_, int step_, int channels_ = 1) : columns(columns_), step(step_), channels(channels_) { };
|
||||||
__host__ step_functor(cv::cuda::GpuMat& mat)
|
__host__ step_functor(cv::cuda::GpuMat& mat)
|
||||||
{
|
{
|
||||||
CV_Assert(mat.depth() == cv::DataType<T>::depth);
|
CV_Assert(mat.depth() == cv::DataType<T>::depth);
|
||||||
columns = mat.cols;
|
columns = mat.cols;
|
||||||
step = mat.step / sizeof(T);
|
step = mat.step / sizeof(T);
|
||||||
channels = mat.channels();
|
channels = mat.channels();
|
||||||
}
|
}
|
||||||
__host__ __device__
|
__host__ __device__
|
||||||
int operator()(int x) const
|
int operator()(int x) const
|
||||||
{
|
{
|
||||||
int row = x / columns;
|
int row = x / columns;
|
||||||
int idx = (row * step) + (x % columns)*channels;
|
int idx = (row * step) + (x % columns)*channels;
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
//! [step_functor]
|
//! [step_functor]
|
||||||
//! [begin_itr]
|
//! [begin_itr]
|
||||||
/*
|
/*
|
||||||
@Brief GpuMatBeginItr returns a thrust compatible iterator to the beginning of a GPU mat's memory.
|
@Brief GpuMatBeginItr returns a thrust compatible iterator to the beginning of a GPU mat's memory.
|
||||||
@Param mat is the input matrix
|
@Param mat is the input matrix
|
||||||
@Param channel is the channel of the matrix that the iterator is accessing. If set to -1, the iterator will access every element in sequential order
|
@Param channel is the channel of the matrix that the iterator is accessing. If set to -1, the iterator will access every element in sequential order
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<step_functor<T>, thrust::counting_iterator<int>>> GpuMatBeginItr(cv::cuda::GpuMat mat, int channel = 0)
|
thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<step_functor<T>, thrust::counting_iterator<int>>> GpuMatBeginItr(cv::cuda::GpuMat mat, int channel = 0)
|
||||||
{
|
{
|
||||||
if (channel == -1)
|
if (channel == -1)
|
||||||
mat = mat.reshape(1);
|
mat = mat.reshape(1);
|
||||||
CV_Assert(mat.depth() == cv::DataType<T>::depth);
|
CV_Assert(mat.depth() == cv::DataType<T>::depth);
|
||||||
CV_Assert(channel < mat.channels());
|
CV_Assert(channel < mat.channels());
|
||||||
return thrust::make_permutation_iterator(thrust::device_pointer_cast(mat.ptr<T>(0) + channel),
|
return thrust::make_permutation_iterator(thrust::device_pointer_cast(mat.ptr<T>(0) + channel),
|
||||||
thrust::make_transform_iterator(thrust::make_counting_iterator(0), step_functor<T>(mat.cols, mat.step / sizeof(T), mat.channels())));
|
thrust::make_transform_iterator(thrust::make_counting_iterator(0), step_functor<T>(mat.cols, mat.step / sizeof(T), mat.channels())));
|
||||||
}
|
}
|
||||||
//! [begin_itr]
|
//! [begin_itr]
|
||||||
//! [end_itr]
|
//! [end_itr]
|
||||||
@ -58,11 +58,11 @@ thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<s
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<step_functor<T>, thrust::counting_iterator<int>>> GpuMatEndItr(cv::cuda::GpuMat mat, int channel = 0)
|
thrust::permutation_iterator<thrust::device_ptr<T>, thrust::transform_iterator<step_functor<T>, thrust::counting_iterator<int>>> GpuMatEndItr(cv::cuda::GpuMat mat, int channel = 0)
|
||||||
{
|
{
|
||||||
if (channel == -1)
|
if (channel == -1)
|
||||||
mat = mat.reshape(1);
|
mat = mat.reshape(1);
|
||||||
CV_Assert(mat.depth() == cv::DataType<T>::depth);
|
CV_Assert(mat.depth() == cv::DataType<T>::depth);
|
||||||
CV_Assert(channel < mat.channels());
|
CV_Assert(channel < mat.channels());
|
||||||
return thrust::make_permutation_iterator(thrust::device_pointer_cast(mat.ptr<T>(0) + channel),
|
return thrust::make_permutation_iterator(thrust::device_pointer_cast(mat.ptr<T>(0) + channel),
|
||||||
thrust::make_transform_iterator(thrust::make_counting_iterator(mat.rows*mat.cols), step_functor<T>(mat.cols, mat.step / sizeof(T), mat.channels())));
|
thrust::make_transform_iterator(thrust::make_counting_iterator(mat.rows*mat.cols), step_functor<T>(mat.cols, mat.step / sizeof(T), mat.channels())));
|
||||||
}
|
}
|
||||||
//! [end_itr]
|
//! [end_itr]
|
Loading…
x
Reference in New Issue
Block a user