本文整理汇总了C++中cvMerge函数的典型用法代码示例。如果您正苦于以下问题:C++ cvMerge函数的具体用法?C++ cvMerge怎么用?C++ cvMerge使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cvMerge函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: gst_retinex_transform_ip
static GstFlowReturn gst_retinex_transform_ip(GstBaseTransform * btrans, GstBuffer * gstbuf)
{
GstRetinex *retinex = GST_RETINEX (btrans);
GST_RETINEX_LOCK (retinex);
//////////////////////////////////////////////////////////////////////////////
// get image data from the input, which is RGBA or BGRA
retinex->pFrame->imageData = (char*)GST_BUFFER_DATA(gstbuf);
cvSplit(retinex->pFrame,
retinex->ch1, retinex->ch2, retinex->ch3, NULL );
cvMerge(retinex->ch1, retinex->ch2, retinex->ch3, NULL,
retinex->pFrame2);
double sigma = 14.0;
int gain = 128;
int offset = 128;
Retinex( retinex->pFrame2, sigma, gain, offset );
cvSplit(retinex->pFrame2, retinex->ch1, retinex->ch2, retinex->ch3, NULL);
//////////////////////////////////////////////////////////////////////////////
// restore alpha channel from input
cvMerge(retinex->ch1, retinex->ch2, retinex->ch3, retinex->pFrameA,
retinex->pFrame);
GST_RETINEX_UNLOCK (retinex);
return GST_FLOW_OK;
}
开发者ID:miguelao,项目名称:gst_plugins_tsunami,代码行数:30,代码来源:gstretinex.c
示例2: colorizeWinter
// Shade a grayscale image using the "winter" colormap (similar to Matlab's).
void colorizeWinter(IplImage* src, IplImage*& dst, IplImage* mask){
// Create an increasing linear-ramp in the green channel.
cvMerge(NULL, src, NULL, NULL, dst);
// Create a decreasing linear-ramp in the blue channel.
IplImage* blue = cvCloneImage(src);
cvSubRS(src, cvScalar(255.0), blue, mask);
cvMerge(blue, NULL, NULL, NULL, dst);
// Release allocated resources.
cvReleaseImage(&blue);
}
开发者ID:Pacmanfan,项目名称:MultiScan,代码行数:14,代码来源:cvUtilProCam.cpp
示例3: cvCreateImage
void BModel::wiener_filter(const int r, const double sigma, const double S)
{
IplImage *reKernel = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1);
IplImage *image = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 4);
IplImage *reRImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1);
IplImage *reGImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1);
IplImage *reBImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1);
IplImage *kernel = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 2);
IplImage *rImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 2);
IplImage *gImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 2);
IplImage *bImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 2);
IplImage *imaginary = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1);
cvZero(imaginary);
cvZero(reKernel);
create_kernel(r, sigma, reKernel);
cvConvertScale(_tempImageSrc, image, 1/255.);
cvSplit(image, reRImage, reGImage, reBImage, 0);
cvMerge(reKernel, imaginary, 0, 0, kernel);
cvMerge(reRImage, imaginary, 0, 0, rImage);
cvMerge(reGImage, imaginary, 0, 0, gImage);
cvMerge(reBImage, imaginary, 0, 0, bImage);
wiener_filter_chanel(rImage, kernel, S);
cvSplit(rImage, reRImage, imaginary, 0, 0);
wiener_filter_chanel(gImage, kernel, S);
cvSplit(gImage, reGImage, imaginary, 0, 0);
wiener_filter_chanel(bImage, kernel, S);
cvSplit(bImage, reBImage, imaginary, 0, 0);
cvMerge(reRImage, reGImage, reBImage, 0, image);
cvConvertScale(image, _tempImageDst, 255);
remap_image(_tempImageDst, -r);
change_filt_image();
create_temp_image(_srcImage);
cvReleaseImage(&reKernel);
cvReleaseImage(&image);
cvReleaseImage(&reRImage);
cvReleaseImage(&reGImage);
cvReleaseImage(&reBImage);
cvReleaseImage(&kernel);
cvReleaseImage(&rImage);
cvReleaseImage(&gImage);
cvReleaseImage(&bImage);
cvReleaseImage(&imaginary);
}
开发者ID:grafin,项目名称:Diplom,代码行数:50,代码来源:bmodel.cpp
示例4: adjustHSV
void adjustHSV(IplImage *&src, int HuePosition, int SaturationPosition, int ValuePosition)
{
int Hue = HuePosition;
double Saturation = SaturationPosition * 2.55;
double Value = ValuePosition / 100.;
//create float image
IplImage *temp = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F, src->nChannels);
cvConvertScale(src, temp, 1.0/255.0, 0);
//split
IplImage* floatingH = cvCreateImage( cvGetSize(src), IPL_DEPTH_32F, 1 );
IplImage* floatingS = cvCreateImage( cvGetSize(src), IPL_DEPTH_32F, 1 );
IplImage* floatingV = cvCreateImage( cvGetSize(src), IPL_DEPTH_32F, 1 );
cvCvtColor(temp, temp, CV_BGR2HSV);//color convert
cvSplit( temp, floatingH, floatingS, floatingV, NULL);
//adjust
cvAddS(floatingH, cvScalarAll(Hue), floatingH);
cvAddS(floatingV, cvScalarAll(Value), floatingV);
//merge
cvZero(temp);
cvMerge(floatingH, floatingS, floatingV, NULL, temp);
cvCvtColor(temp, temp, CV_HSV2BGR);
//save
cvConvertScale( temp, src, 255, 0 );
IplImage *HSV = convertImageRGBtoHSV(src);
IplImage *H = cvCreateImage(cvGetSize(src), src->depth, 1);
IplImage *S = cvCreateImage(cvGetSize(src), src->depth, 1);
IplImage *V = cvCreateImage(cvGetSize(src), src->depth, 1);
cvSplit(HSV, H, S, V, 0);
cvAddS(S, cvScalarAll(Saturation), S);
cvMerge(H, S, V, 0, HSV);
cvReleaseImage(&src);
src = convertImageHSVtoRGB(HSV);
cvReleaseImage(&HSV);
cvReleaseImage(&H);
cvReleaseImage(&S);
cvReleaseImage(&V);
cvReleaseImage(&temp);
cvReleaseImage(&floatingH);
cvReleaseImage(&floatingS);
cvReleaseImage(&floatingV);
}//end HSV
开发者ID:QbsuranAlang,项目名称:InstaFilter,代码行数:50,代码来源:Customize.cpp
示例5: crop
IplImage* crop(IplImage* src, CvPoint c, int r){
IplImage* res, * roi;
//src = cvLoadImage("x.jpg", 1);
res = cvCreateImage(cvGetSize(src), 8, 3);
roi = cvCreateImage(cvGetSize(src), 8, 1);
/* prepare the 'ROI' image */
cvZero(roi);
/* Note that you can use any shape for the ROI */
cvCircle(
roi,
c,
r,
CV_RGB(255, 255, 255),
-1, 8, 0
);
/* extract subimage */
cvAnd(src, src, res, roi);
/* 'restore' subimage */
IplImage* roi_C3 = cvCreateImage(cvGetSize(src), 8, 3);
cvMerge(roi, roi, roi, NULL, roi_C3);
cvAnd(res, roi_C3, res, NULL);
return res;
}
开发者ID:dsatiate,项目名称:Facial-feature-tracking-OpenCv,代码行数:32,代码来源:main.cpp
示例6: equalize_image
void equalize_image(IplImage *img)
{
IplImage *b = NULL;
IplImage *g = NULL;
IplImage *r = NULL;
if (img->nChannels == 1)
{
cvEqualizeHist(img, img);
}
else if (img->nChannels == 3)
{
b = cvCreateImage(cvGetSize(img), 8, 1);
g = cvCreateImage(cvGetSize(img), 8, 1);
r = cvCreateImage(cvGetSize(img), 8, 1);
cvSplit(img, b, g, r, NULL);
cvEqualizeHist(b,b);
cvEqualizeHist(g,g);
cvEqualizeHist(r,r);
cvMerge(b,g,r,NULL,img);
cvReleaseImage(&b);
cvReleaseImage(&g);
cvReleaseImage(&r);
}
}
开发者ID:ulyssesrr,项目名称:carmen_lcad,代码行数:29,代码来源:visual_memory_filters.c
示例7: YUV_read
enum YUV_ReturnValue
YUV_read(struct YUV_Capture *cap)
{
size_t bytes_read;
size_t npixels;
npixels = cap->width*cap->height;
bytes_read = fread(cap->y->imageData, sizeof(uint8_t), npixels, cap->fin);
if (bytes_read == 0)
return YUV_EOF;
else if (bytes_read != npixels)
return YUV_IO_ERROR;
bytes_read = fread(cap->cb_half->imageData, sizeof(uint8_t), npixels / 4, cap->fin);
if (bytes_read != npixels / 4)
return YUV_IO_ERROR;
bytes_read = fread(cap->cr_half->imageData, sizeof(uint8_t), npixels / 4, cap->fin);
if (bytes_read != npixels / 4)
return YUV_IO_ERROR;
cvResize(cap->cb_half, cap->cb, CV_INTER_CUBIC);
cvResize(cap->cr_half, cap->cr, CV_INTER_CUBIC);
cvMerge(cap->y, cap->cr, cap->cb, NULL, cap->ycrcb);
return YUV_OK;
}
开发者ID:JepsonLin,项目名称:GlobalMotionEstimationProject,代码行数:26,代码来源:yuv.cpp
示例8: draw
void draw(int dummy)
{
//delaunay
cvClearMemStorage(storage);
subdiv=cvCreateSubdivDelaunay2D(rect,trianglestore);
blur(origV, out);
SWAP(in,out);
thresh(in, out);
findContours(out, storage, &contours);
cvMerge(origH, origS, out, NULL, temp);
cvCvtColor( temp, temp, CV_HSV2RGB );
every_contour(contours, temp);
drawContour(temp, contours);
SWAP(in,out);
draw_subdiv(temp,subdiv, cvScalar(255,255,255,255));
if(k==0)
{
cvNot(in,out);
//k=1;
}
else{}
cvClearMemStorage(trianglestore);
//findcorners(origH,out); //needs 32bit float image
cvShowImage(OUT, temp);
}
开发者ID:ntavish,项目名称:tri,代码行数:30,代码来源:main.c
示例9: customizeImage
bool _stdcall customizeImage(LPWSTR csInputPath, LPWSTR csOutputPath, int *values, bool isGray)
{
char inputPath[SIZE] = "";
WideCharToMultiByte(950, 0, csInputPath, -1, inputPath, SIZE, NULL, NULL);//wchar_t * to char
char outputPath[SIZE] = "";
WideCharToMultiByte(950, 0, csOutputPath, -1, outputPath, SIZE, NULL, NULL);//wchar_t * to char *
IplImage *img = cvLoadImage(inputPath, 1);
if(!img)
return false;
else
{
if(isGray)
{
IplImage *gray = cvCreateImage(cvGetSize(img), img->depth, 1);
cvCvtColor(img, gray, CV_BGR2GRAY);
cvMerge(gray, gray, gray, 0, img);
cvReleaseImage(&gray);
}//end if
adjustRGB(img, values[0], values[1], values[2]);
adjustHSV(img, values[3], values[4], values[5]);
adjustBrightnessContrast(img, values[6], values[7]);
cvSaveImage(outputPath, img);
cvReleaseImage(&img);
return true;
}//end else
return false;
}//end combineImage
开发者ID:QbsuranAlang,项目名称:InstaFilter,代码行数:33,代码来源:Customize.cpp
示例10: ocv_histogramac1
IplImage *ocv_histogramac(IplImage *image) {
if (!image) { present(1, "!image"); return NULL; }
IplImage *iplImageOut = NULL;
if (image->nChannels == 1) {
iplImageOut = ocv_histogramac1(image);
} else if (image->nChannels == 3) {
IplImage *iplImgIR = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
IplImage *iplImgIG = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
IplImage *iplImgIB = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
cvSplit(image, iplImgIR, iplImgIG, iplImgIB, NULL);
IplImage *iplImgOR = ocv_histogramac1(iplImgIR);
IplImage *iplImgOG = ocv_histogramac1(iplImgIG);
IplImage *iplImgOB = ocv_histogramac1(iplImgIB);
cvReleaseImage(&iplImgIR);
cvReleaseImage(&iplImgIG);
cvReleaseImage(&iplImgIB);
iplImageOut = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);
cvMerge(iplImgOR, iplImgOG, iplImgOB, NULL, iplImageOut);
cvReleaseImage(&iplImgOR);
cvReleaseImage(&iplImgOG);
cvReleaseImage(&iplImgOB);
}
return iplImageOut;
}
开发者ID:changeyourdestiny,项目名称:DIP,代码行数:27,代码来源:ocv_histogramac.c
示例11: ASSERT
/// <summary>
///光照归一化处理
///1.转换色彩空间到HSV空间;
///2.把HSV空间的V值设置为固定的值IlluminationThreshold;
///3.再从HSV空间转换到RGB空间;
/// </summary>
void CLightSet::LightNormalization(IplImage* src, IplImage* dst, int threshold){
ASSERT(src->nChannels==3);
//转换色彩空间
cvCvtColor(src,dst,CV_RGB2HSV);
//分离通道
IplImage* imgChannel[3] = { 0, 0, 0 };
for (int i=0;i<dst->nChannels;i++)
{
imgChannel[i] = cvCreateImage(cvGetSize( dst ), IPL_DEPTH_8U, 1); //要求单通道图像才能直方图均衡化
}
cvSplit(dst, imgChannel[0], imgChannel[1], imgChannel[2],0);//HSVA
CvScalar avg=cvAvg(imgChannel[2]);
cvCvtScale(imgChannel[2],imgChannel[2],1.0,threshold-avg.val[0]);
cvMerge( imgChannel[0], imgChannel[1], imgChannel[2], 0, src );
cvCvtColor(dst,dst,CV_HSV2RGB);
for (int i=0;i<dst->nChannels;i++)
{
cvReleaseImage(&imgChannel[i] );
}
}
开发者ID:cJeek,项目名称:homeServiceRobot,代码行数:31,代码来源:LightSet.cpp
示例12: cvCreateImage
Mat initModify::histogramEqualization(Mat & sourceImage) {
// change the Mat to IplImage, which can make whole process quicker.
IplImage * src;
src = &IplImage(sourceImage);
IplImage * imgChannel[4] = { 0, 0, 0, 0 };
IplImage * dist = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);
if (src) {
for (int i = 0; i < src->nChannels; i++) {
imgChannel[i] = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
}
// split all the channels (R, G, B, A)
cvSplit(src, imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3]);
for (int i = 0; i < dist->nChannels; i++) {
cvEqualizeHist(imgChannel[i], imgChannel[i]);
}
// merge all the channels
cvMerge(imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3], dist);
Mat resultImage = cvarrToMat(dist, true);
cvReleaseImage(&dist);
return resultImage;
}
else {
return Mat();
}
}
开发者ID:jmydurant,项目名称:jmy_video_composition,代码行数:27,代码来源:initModify.cpp
示例13: show_points
void show_points( IplImage* gray, CvPoint2D32f* u, int u_cnt, CvPoint2D32f* v, int v_cnt,
CvSize etalon_size, int was_found )
{
CvSize size;
int i;
cvGetImageRawData( gray, 0, 0, &size );
IplImage* rgb = cvCreateImage( size, 8, 3 );
cvMerge( gray, gray, gray, 0, rgb );
if( v )
{
for( i = 0; i < v_cnt; i++ )
{
cvCircle( rgb, cvPoint(cvRound(v[i].x), cvRound(v[i].y)), 3, CV_RGB(255,0,0), CV_FILLED);
}
}
if( u )
{
for( i = 0; i < u_cnt; i++ )
{
cvCircle( rgb, cvPoint(cvRound(u[i].x), cvRound(u[i].y)), 3, CV_RGB(0,255,0), CV_FILLED);
}
}
cvDrawChessboardCorners( rgb, etalon_size, v, v_cnt, was_found );
cvvNamedWindow( "test", 0 );
cvvShowImage( "test", rgb );
cvvWaitKey(0);
}
开发者ID:JackJone,项目名称:opencv,代码行数:34,代码来源:achesscorners.cpp
示例14: cvCreateImage
IplImage* Panoramic::GetHsvFeature(IplImage* src,int H,int S,int V,int Scale ,int Scale_1 ,int Scale_2)
{
IplImage *colorImg = cvCreateImage(cvGetSize(src),8,3);
IplImage *hsvImg = cvCreateImage(cvGetSize(src),8,3);
cvCopy(src,colorImg);
IplImage *Plane_1 = cvCreateImage( cvGetSize(colorImg), 8, 1);//H plane
IplImage *Plane_2 = cvCreateImage( cvGetSize(colorImg), 8, 1);//S plane
IplImage *Plane_3 = cvCreateImage( cvGetSize(colorImg), 8, 1);//V plane
IplImage *dst = cvCreateImage( cvGetSize(src),8,1);
cvCvtColor(colorImg,hsvImg,CV_BGR2HSV);
cvCvtPixToPlane( hsvImg, Plane_1, Plane_2, Plane_3, 0 );
cvEqualizeHist(Plane_2,Plane_2);//s_plane
cvEqualizeHist(Plane_3,Plane_3);//v_plane
cvMerge(Plane_1,Plane_2,Plane_3,0,hsvImg);
cvInRangeS(hsvImg, cvScalar(H,S, V), cvScalar(5*Scale+H,5*Scale_1+S,5*Scale_2+V), dst);//cvScalar(0,40, 40), cvScalar(60, 170, 255)
cvErode(dst,dst,0,2);
/*cvNamedWindow("HSV_ROI",0);
cvShowImage ("HSV_ROI",dst);*/
cvReleaseImage(&colorImg);
cvReleaseImage(&hsvImg);
cvReleaseImage(&Plane_1);
cvReleaseImage(&Plane_2);
cvReleaseImage(&Plane_3);
return dst;
}
开发者ID:Claycau,项目名称:MultiviewFaceReg,代码行数:29,代码来源:Panoramic.cpp
示例15: imageturn
void imageturn(Mat imagein,Mat &imageout)//将rgb转化hsv,然后改变hsv图像。
{
IplImage imgtemp=imagein;
IplImage* src =cvCloneImage(&imgtemp);
IplImage* floathsv = NULL;
IplImage* floatimgH = NULL;
IplImage* floatimgS = NULL;
IplImage* floatimgV = NULL;
IplImage* floatimgZ = NULL;
CvSize size = cvGetSize( src );
IplImage* imgout=cvCreateImage( size, 8, 3 );
floathsv = cvCreateImage( size, 8, 3 );
floatimgH = cvCreateImage( size, 8, 1 );
floatimgS = cvCreateImage( size,8, 1 );
floatimgV = cvCreateImage( size, 8, 1 );
floatimgZ = cvCreateImage( size, 8, 1 );
cvCvtColor(src,floathsv,CV_BGR2HSV);
cvSplit( floathsv, floatimgH, floatimgS, floatimgV, NULL);
Mat V(floatimgV,true);
Mat Vout;
sharpen(V,Vout);
imgtemp=Vout;
floatimgV=cvCloneImage(&imgtemp);
cvSmooth(floatimgV, floatimgZ, CV_MEDIAN);//中值滤波
cvEqualizeHist( floatimgZ, floatimgV ); //直方图均衡化
cvMerge( floatimgH, floatimgS, floatimgV,0,imgout);
Mat M(imgout,true);
imageout=M;
}
开发者ID:yinlinzi,项目名称:Text_Image_Location,代码行数:29,代码来源:Inhance_image.cpp
示例16: toAnaglyph
IplImage*
toAnaglyph(IplImage *imgLeft, IplImage *imgRight)
{
IplImage *iplReturn;
IplImage *l_R, * l_G, *l_B;
IplImage *r_R, * r_G, *r_B;
iplReturn = cvCreateImage(cvGetSize(imgLeft),
imgLeft->depth,
imgLeft->nChannels);
l_R = cvCreateImage(cvGetSize(imgLeft), imgLeft->depth, 1);
l_G = cvCreateImage(cvGetSize(imgLeft), imgLeft->depth, 1);
l_B = cvCreateImage(cvGetSize(imgLeft), imgLeft->depth, 1);
r_R = cvCreateImage(cvGetSize(imgLeft), imgLeft->depth, 1);
r_G = cvCreateImage(cvGetSize(imgLeft), imgLeft->depth, 1);
r_B = cvCreateImage(cvGetSize(imgLeft), imgLeft->depth, 1);
cvSplit(imgLeft, l_R, l_G, l_B, NULL);
cvSplit(imgRight, r_R, r_G, r_B, NULL);
//cvMerge(r_R, r_G, l_B, NULL, iplReturn);
cvMerge(r_R, l_G, l_B, NULL, iplReturn);
cvReleaseImage(&l_R);
cvReleaseImage(&l_G);
cvReleaseImage(&l_B);
cvReleaseImage(&r_R);
cvReleaseImage(&r_G);
cvReleaseImage(&r_B);
return iplReturn;
}
开发者ID:veter-team,项目名称:cockpit,代码行数:34,代码来源:toanaglyph.cpp
示例17: calcularHistograma
IplImage *ocv_histogram(IplImage *image) {
if (!image) { present(1, "!image"); return NULL; }
#if 1
size_t binsCount = 0;
size_t *bins = NULL;
calcularHistograma(image, &binsCount, &bins);
IplImage *subimage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);
graficarHistograma(subimage, binsCount, bins);
cvReleaseImage(&subimage); //return subimage;
#endif
IplImage *iplImageOut = NULL;
if (image->nChannels == 1) {
iplImageOut = ocv_histogram1(image);
} else if (image->nChannels == 3) {
IplImage *iplImgIR = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
IplImage *iplImgIG = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
IplImage *iplImgIB = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
cvSplit(image, iplImgIR, iplImgIG, iplImgIB, NULL);
IplImage *iplImgOR = ocv_histogram1(iplImgIR);
IplImage *iplImgOG = ocv_histogram1(iplImgIG);
IplImage *iplImgOB = ocv_histogram1(iplImgIB);
cvReleaseImage(&iplImgIR);
cvReleaseImage(&iplImgIG);
cvReleaseImage(&iplImgIB);
iplImageOut = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);
cvMerge(iplImgOR, iplImgOG, iplImgOB, NULL, iplImageOut);
cvReleaseImage(&iplImgOR);
cvReleaseImage(&iplImgOG);
cvReleaseImage(&iplImgOB);
}
return iplImageOut;
}
开发者ID:changeyourdestiny,项目名称:DIP,代码行数:34,代码来源:ocv_histogram.c
示例18: cvQueryRPiFrame
/* This will output a frame that can be used for OpenCV */
IplImage* cvQueryRPiFrame(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
{
MMAL_BUFFER_HEADER_T *new_buffer;
PORT_USERDATA *pData = (PORT_USERDATA *)port->userdata;
if (pData)
{
if (buffer->length)
{
/*Convert buffer to RGB IplImage*/
mmal_buffer_header_mem_lock(buffer);
int w=pData->pstate->width; // get image size
int h=pData->pstate->height;
int h4=h/4;
memcpy(yCSI_CAM->imageData,buffer->data,w*h);
memcpy(uCSI_CAM->imageData,buffer->data+w*h,w*h4);
memcpy(vCSI_CAM->imageData,buffer->data+w*h+w*h4,w*h4);
cvResize(uCSI_CAM, uCSI_CAM_BIG, CV_INTER_NN);
cvResize(vCSI_CAM, vCSI_CAM_BIG, CV_INTER_NN); //CV_INTER_LINEAR looks better but it's slower
cvMerge(yCSI_CAM, uCSI_CAM_BIG, vCSI_CAM_BIG, NULL, CSI_CAM_IMAGE);
cvCvtColor(CSI_CAM_IMAGE,CSI_CAM_DSTIMAGE,CV_YCrCb2RGB); // convert in RGB color space (slow)
mmal_buffer_header_mem_unlock(buffer);
}
else
{
vcos_log_error("buffer null");
}
}
else
{
vcos_log_error("Received a encoder buffer callback with no state");
}
// release buffer back to the pool
mmal_buffer_header_release(buffer);
// and send one back to the port (if still open)
if (port->is_enabled)
{
MMAL_STATUS_T status;
new_buffer = mmal_queue_get(pData->pstate->video_pool->queue);
if (new_buffer)
status = mmal_port_send_buffer(port, new_buffer);
if (!new_buffer || status != MMAL_SUCCESS)
vcos_log_error("Unable to return a buffer to the encoder port");
}
return CSI_CAM_DSTIMAGE;
}
开发者ID:JMarple,项目名称:RPi_OpenCV,代码行数:60,代码来源:csiopencv.c
示例19: ImageComponentsRGB2Image
void ImageComponentsRGB2Image(ImageComponents *image_componentes)
{
cvMerge(image_componentes->img[0],
image_componentes->img[0],
image_componentes->img[0],
NULL,
image_componentes->image);
}
开发者ID:allangdc,项目名称:ImageFilter,代码行数:8,代码来源:ImageComponents.cpp
示例20: findCorners
//
// コーナーを検出する
//
// 引数:
// frameImage : キャプチャ画像用IplImage
// grayImage : グレースケール画像用IplImage
// corners : コーナーの位置を格納する変数
//
// 戻り値:
// 0 : コーナーがすべて検出できなかった場合
// 非0 : コーナーがすべて検出された場合
//
int findCorners( IplImage *frameImage, IplImage *grayImage, CvPoint2D32f *corners ) {
int cornerCount; // 検出したコーナーの数
int findChessboardCornersFlag; // cvFindChessboardCorners用フラグ
int findFlag; // コーナーがすべて検出できたかのフラグ
IplImage* m_image_binary;
IplImage* m_set_image;
m_image_binary = cvCreateImage(cvSize(frameImage->width, frameImage->height), IPL_DEPTH_8U, 1);
m_set_image = cvCreateImage(cvSize(frameImage->width, frameImage->height), IPL_DEPTH_8U, 3);
// cvChessboardCorners用フラグを生成する
findChessboardCornersFlag = createFindChessboardCornersFlag();
// 画像をBinaryImageとして変換する。
// コーナーを検出する
cvCvtColor( frameImage, grayImage, CV_BGR2GRAY );
// グレースケールから2値に変換する
cvThreshold( grayImage, m_image_binary, 128, 255, CV_THRESH_BINARY );
// Convert to 3channel image
cvMerge(m_image_binary, m_image_binary, m_image_binary, NULL, m_set_image);
findFlag=cvFindChessboardCorners(
m_set_image,
//m_set_image,
//cvSize( CORNER_WIDTH, CORNER_HEIGHT ),
board_sz,
corners,
&cornerCount,
findChessboardCornersFlag
);
if( findFlag != 0 ) {
// コーナーがすべて検出された場合
// 検出されたコーナーの位置をサブピクセル単位にする
CvTermCriteria criteria={ CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, MAX_ITERATIONS, EPSILON };
cvFindCornerSubPix(
grayImage,
corners,
cornerCount,
cvSize( SEARCH_WINDOW_HALF_WIDTH, SEARCH_WINDOW_HALF_HEIGHT ),
cvSize( DEAD_REGION_HALF_WIDTH, DEAD_REGION_HALF_HEIGHT ),
cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, MAX_ITERATIONS, EPSILON )
);
}
// コーナーの位置を描く
cvDrawChessboardCorners( frameImage, board_sz, corners, cornerCount, findFlag );
cvReleaseImage(&m_set_image);
cvReleaseImage(&m_image_binary);
return findFlag;
}
开发者ID:fsi-katami,项目名称:RTCCatalog2010_OpenCV,代码行数:69,代码来源:ImageCalibration.cpp
注:本文中的cvMerge函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论