コード例 #1
0
ファイル: CMP_CvMult.c プロジェクト: xinkang/blendocv
static void node_composit_exec_cvMult(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
	CvArr* dst;
	CvArr* src1;
	CvArr* src2;
	
	CV_FUNCNAME( "cvMult" ); 
	if(out[0]->hasoutput==0) return;
	cvSetErrMode(1); //Parent mode error
	__CV_BEGIN__;
	if((in[0]->data)&&(in[1]->data)){
			
		CV_CALL(src1 = in[0]->data);
		CV_CALL(src2 = in[1]->data);
		if(!BOCV_checkAreSameType(src1, src2))
			  CV_ERROR( CV_StsBadArg,"The source inputs are differents" );

		CV_CALL(dst=BOCV_CreateArrFrom(src2));
		if(dst)		
		{
			CV_CALL(cvMul(src1, src2, dst, 1.0));
		 	CV_CALL(out[0]->data= dst);
		}
	}
	__CV_END__;
}
コード例 #2
0
ファイル: CMP_CvAnd.c プロジェクト: gmaclair/blendocv
static void node_composit_exec_cvAnd(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
	CvArr* dst;
	CvArr* src1;
	CvArr* src2;
	CvArr* mask=NULL;
        CompBuf* dst_buf;

	if(out[0]->hasoutput==0) return;
	if((in[0]->data)){
                //Inputs
		src1 = BOCV_IplImage_attach(in[0]->data);
                mask = BOCV_Mask_attach(in[2]->data);
                
                //Output
                dst_buf=dupalloc_compbuf(in[0]->data);
                dst=BOCV_IplImage_attach(dst_buf);

                //Check Image - Mask sizes
                if(mask){
                    if (!BOCV_checkMask(src1, mask)){
                        node->error= 1;
                        return;
                    }
                }
                
                if(in[1]->data){
                    src2 = BOCV_IplImage_attach(in[1]->data);
                    //Checks
                    //Check Image Sizes
                    if(!BOCV_checkAreSameType(src1, src2)){
                        node->error= 1;
                        return;
                    }
                    //Check Image number Channels
                    if(!BOCV_checkSameNChannels(src1, src2)){
                        node->error= 1;
                        return;
                    }
                    cvAnd(src1, src2, dst, mask);
                    BOCV_IplImage_detach(src2);
                }else{
                    CvScalar s;
                    s.val[0]= (in[1]->vec[0]);
                    s.val[1]= (in[1]->vec[1]);
                    s.val[2]= (in[1]->vec[2]);
                    s.val[3]= 0;
                    cvAndS(src1, s, dst, mask);
                }
                
                out[0]->data= dst_buf;
		
                BOCV_IplImage_detach(src1);
                
                BOCV_IplImage_detach(mask);
                BOCV_IplImage_detach(dst);

	}
	
}
コード例 #3
0
ファイル: BOCV_util.c プロジェクト: jamesguo/blendocv
int BOCV_checkMask(void* src1, void* mask){
    if(!BOCV_checkAreSameType(src1, mask)){
        return 0; 
    }
    if(CV_IS_IMAGE(mask)){
            if(((IplImage*)mask)->nChannels!=1){
                BKE_report(NULL, 1<<4,"Mask must be 1 channel, please convert to gray");
                return 0;
            }
    }
    return 1;
}
コード例 #4
0
ファイル: CMP_CvSub.c プロジェクト: gmaclair/blendocv
static void node_composit_exec_cvSub(void *data, bNode *node, bNodeStack **in, bNodeStack **out) {
    CvArr* dst;
    CvArr* src1;
    CvArr* src2;
    CvArr* mask = NULL;
    CompBuf *dst_buf;

    if (out[0]->hasoutput == 0) return;
    if ((in[0]->data)) {
        src1 = BOCV_IplImage_attach(in[0]->data);

        if (in[2]->data) {
            mask = BOCV_Mask_attach(in[2]->data);
            if (!BOCV_checkMask(src1, mask)) {
                node->error = 1;
                return;
            }
        }

        //Create output
        dst_buf = dupalloc_compbuf(in[0]->data);
        dst = BOCV_IplImage_attach(dst_buf);


        //If there are second input
        if (in[1]->data) {
            src2 = BOCV_IplImage_attach(in[1]->data);
            if (!BOCV_checkAreSameType(src1, src2)) {
                node->error = 1;
                return;
            }
            if (!BOCV_checkSameNChannels(src1, src2)) {
                node->error = 1;
                return;
            }
            cvSub(src1, src2, dst, mask);
            BOCV_IplImage_detach(src2);
        } else {
            CvScalar s;
            s.val[0] = (in[1]->vec[0]);
            s.val[1] = (in[1]->vec[1]);
            s.val[2] = (in[1]->vec[2]);
            s.val[3] = 0;
            cvSubS(src1, s, dst, mask);
        }

        out[0]->data = dst_buf;
        BOCV_IplImage_detach(src1);
        BOCV_IplImage_detach(dst);
    }
}
コード例 #5
0
ファイル: CMP_CvDiv.c プロジェクト: gmaclair/blendocv
static void node_composit_exec_cvDiv(void *data, bNode *node, bNodeStack **in, bNodeStack **out) {
    CvArr* dst;
    CvArr* src1;
    CvArr* src2;
    CompBuf *dst_buf;

    if (out[0]->hasoutput == 0) return;
    if ((in[0]->data) && in[1]->data) {
        //Get inuts
        src1 = BOCV_IplImage_attach(in[0]->data);
        src2 = BOCV_IplImage_attach(in[1]->data);

        //Create output
        dst_buf = dupalloc_compbuf(in[0]->data);
        dst = BOCV_IplImage_attach(dst_buf);


        //Check for inputs    
        if (!BOCV_checkAreSameType(src1, src2)) {
            node->error = 1;
            return;
        }
        if (!BOCV_checkSameNChannels(src1, src2)) {
            node->error = 1;
            return;
        }

        cvDiv(src1, src2, dst, in[2]->vec[0]);

        //Output
        out[0]->data = dst_buf;

        //Release memory
        BOCV_IplImage_detach(src1);
        BOCV_IplImage_detach(src2);
        BOCV_IplImage_detach(dst);
    }
}