本文整理汇总了C++中mrpt::utils::CImage类的典型用法代码示例。如果您正苦于以下问题:C++ CImage类的具体用法?C++ CImage怎么用?C++ CImage使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CImage类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: buildPyramid_templ
void buildPyramid_templ(
CImagePyramid &obj,
mrpt::utils::CImage &img,
const size_t nOctaves,
const bool smooth_halves,
const bool convert_grayscale)
{
ASSERT_ABOVE_(nOctaves,0)
//TImageSize img_size = img.getSize();
obj.images.resize(nOctaves);
// First octave: Just copy the image:
if (convert_grayscale && img.isColor())
{
// In this case we have to convert to grayscale, so FASTLOAD doesn't really matter:
img.grayscale(obj.images[0]);
}
else
{
// No need to convert to grayscale OR image already is grayscale:
if (FASTLOAD)
obj.images[0].copyFastFrom(img); // Fast copy -> "move", destroying source.
else obj.images[0] = img; // Normal copy
}
// Rest of octaves, if any:
for (size_t o=1;o<nOctaves;o++)
{
if (smooth_halves)
obj.images[o-1].scaleHalfSmooth(obj.images[o]);
else obj.images[o-1].scaleHalf(obj.images[o]);
}
}
示例2: drawHorzRules
void CFormPlayVideo::drawHorzRules(mrpt::utils::CImage& img)
{
if (!cbDrawStereoRules->IsChecked()) return;
img.forceLoad();
const size_t Ay = edHorzRuleSpace->GetValue();
const size_t h = img.getHeight();
const size_t w = img.getWidth();
for (size_t y = Ay; y < h; y += Ay)
img.line(0, y, w - 1, y, mrpt::utils::TColor::white());
}
示例3: writeImage
/* ----------------------------------------------------------
writeImage
---------------------------------------------------------- */
bool CVideoFileWriter::writeImage(const mrpt::utils::CImage& img) const
{
if (!m_video.get())
return false;
if ((size_t)m_img_size.x!=img.getWidth() || (size_t)m_img_size.y!=img.getHeight())
{
std::cout << format("[CVideoFileWriter::writeImage] Error: video frame size is %ix%i but image is %ux%u", m_img_size.x,m_img_size.y,(unsigned)img.getWidth(),(unsigned)img.getHeight() ) << std::endl;
return false;
}
#if MRPT_HAS_OPENCV
return 0!= cvWriteFrame( M_WRITER, img.getAs<IplImage>() );
#else
return false;
#endif
}
示例4: extractFeaturesKLT
/************************************************************************************************
* extractFeaturesKLT
************************************************************************************************/
void CFeatureExtraction::extractFeaturesKLT(
const mrpt::utils::CImage &inImg,
CFeatureList &feats,
unsigned int init_ID,
unsigned int nDesiredFeatures,
const TImageROI &ROI) const
{
//#define VERBOSE_TIMING
#ifdef VERBOSE_TIMING
CTicTac tictac;
#endif
MRPT_START
#if MRPT_HAS_OPENCV
const unsigned int MAX_COUNT = 300;
// -----------------------------------------------------------------
// Create OpenCV Local Variables
// -----------------------------------------------------------------
int count = 0;
int nPts;
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
const cv::Mat img( cv::cvarrToMat( inImg.getAs<IplImage>() ) );
#ifdef VERBOSE_TIMING
cout << "[KLT] Attach: " << tictac.Tac()*1000.0f << endl;
#endif
const CImage inImg_gray( inImg, FAST_REF_OR_CONVERT_TO_GRAY );
const cv::Mat cGrey( cv::cvarrToMat( inImg_gray.getAs<IplImage>() ) );
nDesiredFeatures <= 0 ? nPts = MAX_COUNT : nPts = nDesiredFeatures;
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
#ifdef VERBOSE_TIMING
cout << "[KLT] Create: " << tictac.Tac()*1000.0f << endl;
#endif
count = nPts; // Number of points to find
// -----------------------------------------------------------------
// Select good features with subpixel accuracy (USING HARRIS OR KLT)
// -----------------------------------------------------------------
const bool use_harris = ( options.featsType == featHarris );
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
std::vector<cv::Point2f> points;
cv::goodFeaturesToTrack(
cGrey,points, nPts,
(double)options.harrisOptions.threshold, // for rejecting weak local maxima ( with min_eig < threshold*max(eig_image) )
(double)options.harrisOptions.min_distance, // minimum distance between features
cv::noArray(), // mask
3, // blocksize
use_harris, /* harris */
options.harrisOptions.k
);
#ifdef VERBOSE_TIMING
cout << "[KLT] Find feats: " << tictac.Tac()*1000.0f << endl;
#endif
if( nDesiredFeatures > 0 && count < nPts )
cout << "\n[WARNING][selectGoodFeaturesKLT]: Only " << count << " of " << nDesiredFeatures << " points could be extracted in the image." << endl;
if( options.FIND_SUBPIXEL )
{
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
// Subpixel interpolation
cv::cornerSubPix(cGrey,points,
cv::Size(3,3), cv::Size(-1,-1),
cv::TermCriteria( CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 10, 0.05 ));
#ifdef VERBOSE_TIMING
cout << "[KLT] subpixel: " << tictac.Tac()*1000.0f << endl;
#endif
}
// -----------------------------------------------------------------
// Fill output structure
// -----------------------------------------------------------------
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
feats.clear();
unsigned int borderFeats = 0;
unsigned int nCFeats = init_ID;
int i = 0;
const int limit = min( nPts, count );
//.........这里部分代码省略.........
示例5: extractFeaturesFASTER_N
// N_fast = 9, 10, 12
void CFeatureExtraction::extractFeaturesFASTER_N(
const int N_fast,
const mrpt::utils::CImage & inImg,
CFeatureList & feats,
unsigned int init_ID,
unsigned int nDesiredFeatures,
const TImageROI & ROI ) const
{
MRPT_START
#if MRPT_HAS_OPENCV
// Make sure we operate on a gray-scale version of the image:
const CImage inImg_gray( inImg, FAST_REF_OR_CONVERT_TO_GRAY );
const IplImage *IPL = inImg_gray.getAs<IplImage>();
TSimpleFeatureList corners;
TFeatureType type_of_this_feature;
switch (N_fast)
{
case 9: fast_corner_detect_9 (IPL,corners, options.FASTOptions.threshold, 0, NULL); type_of_this_feature=featFASTER9; break;
case 10: fast_corner_detect_10(IPL,corners, options.FASTOptions.threshold, 0, NULL); type_of_this_feature=featFASTER10; break;
case 12: fast_corner_detect_12(IPL,corners, options.FASTOptions.threshold, 0, NULL); type_of_this_feature=featFASTER12; break;
default:
THROW_EXCEPTION("Only the 9,10,12 FASTER detectors are implemented.")
break;
};
// *All* the features have been extracted.
const size_t N = corners.size();
// Now:
// 1) Sort them by "response": It's ~100 times faster to sort a list of
// indices "sorted_indices" than sorting directly the actual list of features "corners"
std::vector<size_t> sorted_indices(N);
for (size_t i=0;i<N;i++) sorted_indices[i]=i;
// Use KLT response
if (options.FASTOptions.use_KLT_response ||
nDesiredFeatures!=0 // If the user wants us to limit the number of features, we need to do it according to some quality measure
)
{
const int KLT_half_win = 4;
const int max_x = inImg_gray.getWidth() - 1 - KLT_half_win;
const int max_y = inImg_gray.getHeight() - 1 - KLT_half_win;
for (size_t i=0;i<N;i++)
{
const int x = corners[i].pt.x;
const int y = corners[i].pt.y;
if (x>KLT_half_win && y>KLT_half_win && x<=max_x && y<=max_y)
corners[i].response = inImg_gray.KLT_response(x,y,KLT_half_win);
else corners[i].response = -100;
}
std::sort( sorted_indices.begin(), sorted_indices.end(), KeypointResponseSorter<TSimpleFeatureList>(corners) );
}
else
{
for (size_t i=0;i<N;i++)
corners[i].response = 0;
}
// 2) Filter by "min-distance" (in options.FASTOptions.min_distance)
// 3) Convert to MRPT CFeatureList format.
// Steps 2 & 3 are done together in the while() below.
// The "min-distance" filter is done by means of a 2D binary matrix where each cell is marked when one
// feature falls within it. This is not exactly the same than a pure "min-distance" but is pretty close
// and for large numbers of features is much faster than brute force search of kd-trees.
// (An intermediate approach would be the creation of a mask image updated for each accepted feature, etc.)
const bool do_filter_min_dist = options.FASTOptions.min_distance>1;
// Used half the min-distance since we'll later mark as occupied the ranges [i-1,i+1] for a feature at "i"
const unsigned int occupied_grid_cell_size = options.FASTOptions.min_distance/2.0;
const float occupied_grid_cell_size_inv = 1.0f/occupied_grid_cell_size;
unsigned int grid_lx = !do_filter_min_dist ? 1 : (unsigned int)(1 + inImg.getWidth() * occupied_grid_cell_size_inv);
unsigned int grid_ly = !do_filter_min_dist ? 1 : (unsigned int)(1 + inImg.getHeight() * occupied_grid_cell_size_inv );
mrpt::math::CMatrixBool occupied_sections(grid_lx,grid_ly); // See the comments above for an explanation.
occupied_sections.fillAll(false);
unsigned int nMax = (nDesiredFeatures!=0 && N > nDesiredFeatures) ? nDesiredFeatures : N;
const int offset = (int)this->options.patchSize/2 + 1;
const int size_2 = options.patchSize/2;
const size_t imgH = inImg.getHeight();
const size_t imgW = inImg.getWidth();
unsigned int i = 0;
unsigned int cont = 0;
TFeatureID nextID = init_ID;
if( !options.addNewFeatures )
feats.clear();
while( cont != nMax && i!=N )
//.........这里部分代码省略.........
示例6: retrieveFrame
/* --------------------------------------------------------
retrieveFrame
-------------------------------------------------------- */
bool CFFMPEG_InputStream::retrieveFrame( mrpt::utils::CImage &out_img )
{
#if MRPT_HAS_FFMPEG
if (!this->isOpen()) return false;
TFFMPEGContext *ctx = MY_FFMPEG_STATE;
AVPacket packet;
int frameFinished;
while(av_read_frame(ctx->pFormatCtx, &packet)>=0)
{
// Is this a packet from the video stream?
if(packet.stream_index==ctx->videoStream)
{
// Decode video frame
#if LIBAVCODEC_VERSION_MAJOR>52 || (LIBAVCODEC_VERSION_MAJOR==52 && LIBAVCODEC_VERSION_MINOR>=72)
avcodec_decode_video2(
ctx->pCodecCtx,
ctx->pFrame,
&frameFinished,
&packet);
#else
avcodec_decode_video(
ctx->pCodecCtx,
ctx->pFrame,
&frameFinished,
packet.data,
packet.size);
#endif
// Did we get a video frame?
if(frameFinished)
{
// Convert the image from its native format to RGB:
ctx->img_convert_ctx = sws_getCachedContext(
ctx->img_convert_ctx,
ctx->pCodecCtx->width,
ctx->pCodecCtx->height,
ctx->pCodecCtx->pix_fmt,
ctx->pCodecCtx->width,
ctx->pCodecCtx->height,
m_grab_as_grayscale ? PIX_FMT_GRAY8 : PIX_FMT_BGR24, // BGR vs. RGB for OpenCV
SWS_BICUBIC,
NULL, NULL, NULL);
sws_scale(
ctx->img_convert_ctx,
ctx->pFrame->data,
ctx->pFrame->linesize,0,
ctx->pCodecCtx->height,
ctx->pFrameRGB->data,
ctx->pFrameRGB->linesize);
/* JL: Old code (deprecated)
img_convert(
(AVPicture *)ctx->pFrameRGB,
m_grab_as_grayscale ? PIX_FMT_GRAY8 : PIX_FMT_BGR24, // BGR vs. RGB for OpenCV
(AVPicture*)ctx->pFrame,
ctx->pCodecCtx->pix_fmt,
ctx->pCodecCtx->width,
ctx->pCodecCtx->height
); */
//std::cout << "[retrieveFrame] Generating image: " << ctx->pCodecCtx->width << "x" << ctx->pCodecCtx->height << std::endl;
//std::cout << " linsize: " << ctx->pFrameRGB->linesize[0] << std::endl;
if( ctx->pFrameRGB->linesize[0]!= ((m_grab_as_grayscale ? 1:3)*ctx->pCodecCtx->width) )
THROW_EXCEPTION("FIXME: linesize!=width case not handled yet.")
out_img.loadFromMemoryBuffer(
ctx->pCodecCtx->width,
ctx->pCodecCtx->height,
!m_grab_as_grayscale, // Color
ctx->pFrameRGB->data[0]
);
// Free the packet that was allocated by av_read_frame
av_free_packet(&packet);
return true;
}
}
// Free the packet that was allocated by av_read_frame
av_free_packet(&packet);
}
return false; // Error reading/ EOF
#else
return false;
#endif
}
示例7: if
/** Stage2 operations:
* - Detect features on each image and on each scale.
*/
void CStereoOdometryEstimator::stage2_detect_features(
CStereoOdometryEstimator::TImagePairData::img_data_t & img_data,
mrpt::utils::CImage & gui_image,
bool update_dyn_thresholds )
{
using namespace mrpt::vision;
m_profiler.enter("_stg2");
// :: Resize output containers:
const size_t nOctaves = img_data.pyr.images.size();
ASSERTDEB_(nOctaves>0)
vector<size_t> nFeatsPassingKLTPerOctave(nOctaves);
img_data.pyr_feats.resize(nOctaves);
img_data.pyr_feats_index.resize(nOctaves);
img_data.pyr_feats_kps.resize(nOctaves);
img_data.pyr_feats_desc.resize(nOctaves);
vector<size_t> kps_to_detect(nOctaves); // number of kps to detect in each octave
kps_to_detect[0] = size_t(params_detect.orb_nfeats*(2*nOctaves)/(std::pow(2,nOctaves)-1));
for( size_t octave = 1; octave < nOctaves; ++octave )
kps_to_detect[octave] = size_t(round(kps_to_detect[0]/std::pow(2,octave)));
// :: For the GUI thread
m_next_gui_info->stats_feats_per_octave.resize(nOctaves); // Reserve size for stats
m_next_gui_info->stats_FAST_thresholds_per_octave.resize(nOctaves);
// :: Detection parameters
// FASTER METHOD --------------------
// - Evaluate the KLT response of all features to discard those in texture-less zones
const unsigned int KLT_win = params_detect.KLT_win;
const double minimum_KLT_response = params_detect.minimum_KLT_response;
// ----------------------------------
// size_t num_feats_this_octave;
// :: Main loop
for( size_t octave = 0; octave < nOctaves; ++octave )
{
// - Image information
Mat input_im = cv::cvarrToMat(img_data.pyr.images[octave].getAs<IplImage>());
const mrpt::utils::TImageSize img_size = img_data.pyr.images[octave].getSize();
// - Profile section name
const std::string sProfileName = mrpt::format("stg2.detect.oct=%u",static_cast<unsigned int>(octave));
// - Auxiliar parameters that will store preliminar extracted information (before NMS)
TKeyPointList feats_vector;
Mat desc_aux;
// ***********************************
// KLT method (use ORB feature vector, no descriptor)
// ***********************************
if( params_detect.detect_method == TDetectParams::dmKLT )
{
m_profiler.enter(sProfileName.c_str());
// detect Shi&Tomasi keypoints
goodFeaturesToTrack(
input_im, // image
feats_vector, // output feature vector
kps_to_detect[octave], // params_detect.orb_nfeats, // number of features to detect
0.01, // quality level
20); // minimum distance
desc_aux = Mat(); // no descriptor
m_profiler.leave(sProfileName.c_str());
}
// ***********************************
// ORB method
// ***********************************
else if( params_detect.detect_method == TDetectParams::dmORB )
{
// ** NOTE ** in this case, nOctaves should be 1 (set in stage1)
const size_t n_feats_to_extract =
params_detect.non_maximal_suppression ?
1.5*params_detect.orb_nfeats :
params_detect.orb_nfeats; // if non-max-sup is ON extract more features to get approx the number of desired output feats.
m_profiler.enter(sProfileName.c_str());
#if CV_MAJOR_VERSION < 3 // OpenCV < 3.0.0
ORB orbDetector(
n_feats_to_extract, // number of ORB features to extract
1.2, // scale difference
params_detect.orb_nlevels, // number of levels
31, // edgeThreshold
0, // firstLevel
2, // WTA_K
ORB::HARRIS_SCORE, // scoreType
31); // patchSize
// detect keypoints and descriptors
orbDetector( input_im, Mat(), feats_vector, desc_aux ); // all the scales in the same call
#else
//.........这里部分代码省略.........
示例8: extractFeaturesSURF
/************************************************************************************************
* extractFeaturesSURF *
************************************************************************************************/
void CFeatureExtraction::extractFeaturesSURF(
const mrpt::utils::CImage &inImg,
CFeatureList &feats,
unsigned int init_ID,
unsigned int nDesiredFeatures,
const TImageROI &ROI) const
{
MRPT_UNUSED_PARAM(ROI);
#if MRPT_HAS_OPENCV && MRPT_OPENCV_VERSION_NUM >= 0x111
const CImage img_grayscale(inImg, FAST_REF_OR_CONVERT_TO_GRAY);
const IplImage* cGrey = img_grayscale.getAs<IplImage>();
CvSeq *kp = NULL;
CvSeq *desc = NULL;
CvMemStorage *storage = cvCreateMemStorage(0);
// Extract the SURF points:
CvSURFParams surf_params = cvSURFParams(options.SURFOptions.hessianThreshold, options.SURFOptions.rotation_invariant ? 1:0);
surf_params.nOctaves = options.SURFOptions.nOctaves;
surf_params.nOctaveLayers = options.SURFOptions.nLayersPerOctave;
cvExtractSURF( cGrey, NULL, &kp, &desc, storage, surf_params);
// -----------------------------------------------------------------
// MRPT Wrapping
// -----------------------------------------------------------------
feats.clear();
unsigned int nCFeats = init_ID;
int limit;
int offset = (int)this->options.patchSize/2 + 1;
unsigned int imgH = inImg.getHeight();
unsigned int imgW = inImg.getWidth();
if( nDesiredFeatures == 0 )
limit = kp->total;
else
limit = (int)nDesiredFeatures < kp->total ? (int)nDesiredFeatures : kp->total;
for( int i = 0; i < limit; i++ )
{
// Get the OpenCV SURF point
CvSURFPoint *point;
CFeaturePtr ft = CFeature::Create();
point = (CvSURFPoint*)cvGetSeqElem( kp, i );
const int xBorderInf = (int)floor( point->pt.x - options.patchSize/2 );
const int xBorderSup = (int)floor( point->pt.x + options.patchSize/2 );
const int yBorderInf = (int)floor( point->pt.y - options.patchSize/2 );
const int yBorderSup = (int)floor( point->pt.y + options.patchSize/2 );
if( options.patchSize == 0 || ( (xBorderSup < (int)imgW) && (xBorderInf > 0) && (yBorderSup < (int)imgH) && (yBorderInf > 0) ) )
{
ft->type = featSURF;
ft->x = point->pt.x; // X position
ft->y = point->pt.y; // Y position
ft->orientation = point->dir; // Orientation
ft->scale = point->size*1.2/9; // Scale
ft->ID = nCFeats++; // Feature ID into extraction
ft->patchSize = options.patchSize; // The size of the feature patch
if( options.patchSize > 0 )
{
inImg.extract_patch(
ft->patch,
round( ft->x ) - offset,
round( ft->y ) - offset,
options.patchSize,
options.patchSize ); // Image patch surronding the feature
}
// Get the SURF descriptor
float* d = (float*)cvGetSeqElem( desc, i );
ft->descriptors.SURF.resize( options.SURFOptions.rotation_invariant ? 128 : 64 );
std::vector<float>::iterator itDesc;
unsigned int k;
for( k = 0, itDesc = ft->descriptors.SURF.begin(); k < ft->descriptors.SURF.size(); k++, itDesc++ )
*itDesc = d[k];
feats.push_back( ft );
} // end if
} // end for
cvReleaseMemStorage(&storage); // Free memory
#else
THROW_EXCEPTION("Method not available since either MRPT has been compiled without OpenCV or OpenCV version is incorrect (Required 1.1.0)")
#endif //MRPT_HAS_OPENCV
} // end extractFeaturesSURF
示例9: selectGoodFeaturesKLT
/************************************************************************************************
* selectGoodFeaturesKLT *
************************************************************************************************/
void CFeatureExtraction::selectGoodFeaturesKLT(
const mrpt::utils::CImage &inImg,
CFeatureList &feats,
unsigned int init_ID,
unsigned int nDesiredFeatures,
void *mask_ ) const
{
//#define VERBOSE_TIMING
#ifdef VERBOSE_TIMING
CTicTac tictac;
#endif
MRPT_START
#if MRPT_HAS_OPENCV
const unsigned int MAX_COUNT = 300;
// Reinterpret opencv formal arguments
CvMatrix *mask = reinterpret_cast<CvMatrix*>(mask_);
// -----------------------------------------------------------------
// Create OpenCV Local Variables
// -----------------------------------------------------------------
int count = 0;
int nPts;
CvImage img, cGrey;
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
img.attach( const_cast<IplImage*>(inImg.getAs<IplImage>()), false ); // Attach Image as IplImage and do not use ref counter
#ifdef VERBOSE_TIMING
cout << "[KLT] Attach: " << tictac.Tac()*1000.0f << endl;
#endif
if( img.channels() == 1 )
cGrey = img; // Input image is already 'grayscale'
else
{
cGrey.create( cvGetSize( img ), 8, 1);
cvCvtColor( img, cGrey, CV_BGR2GRAY ); // Convert input image into 'grayscale'
}
nDesiredFeatures <= 0 ? nPts = MAX_COUNT : nPts = nDesiredFeatures;
std::vector<CvPoint2D32f> points(nPts);
CvImage eig, temp; // temporary and auxiliary images
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
eig.create( cvGetSize( cGrey ), 32, 1 );
temp.create( cvGetSize( cGrey ), 32, 1 );
#ifdef VERBOSE_TIMING
cout << "[KLT] Create: " << tictac.Tac()*1000.0f << endl;
#endif
count = nPts; // Number of points to find
#if 0 // Temporary debug
{
static int i=0;
cvSaveImage( format("debug_map_%05i.bmp",++i).c_str(), cGrey);
}
#endif
// -----------------------------------------------------------------
// Select good features with subpixel accuracy (USING HARRIS OR KLT)
// -----------------------------------------------------------------
if( options.featsType == featHarris )
{
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
cvGoodFeaturesToTrack( cGrey, eig, temp, &points[0], &count, // input and output data
(double)options.harrisOptions.threshold, // for rejecting weak local maxima ( with min_eig < threshold*max(eig_image) )
(double)options.harrisOptions.min_distance, // minimum distance between features
mask ? (*mask) : static_cast<const CvMat*>(NULL), // ROI
(double)options.harrisOptions.radius, // size of the block of pixels used
1, // use Harris
options.harrisOptions.k ); // k factor for the Harris algorithm
#ifdef VERBOSE_TIMING
cout << "[KLT] Find feats: " << tictac.Tac()*1000.0f << endl;
#endif
}
else
{
#ifdef VERBOSE_TIMING
tictac.Tic();
#endif
cvGoodFeaturesToTrack( cGrey, eig, temp, &points[0], &count, // input and output data
(double)options.KLTOptions.threshold, // for rejecting weak local maxima ( with min_eig < threshold*max(eig_image) )
(double)options.KLTOptions.min_distance, // minimum distance between features
mask ? (*mask) : static_cast<const CvMat*>(NULL), // ROI
options.KLTOptions.radius, // size of the block of pixels used
0, // use Kanade Lucas Tomasi
0.04 ); // un-used parameter
//.........这里部分代码省略.........
示例10: setPixel
inline void setPixel(const openni::RGB888Pixel& src, mrpt::utils::CImage& rgb , int x, int y){ rgb.setPixel(x, y, (src.r << 16) + (src.g << 8) + src.b); }
示例11: resize
inline void resize(mrpt::utils::CImage& rgb , int w, int h){ rgb.resize(w, h, CH_RGB, true); }