openCV C++ 代码笔记

代码片段1

cv_contourMask_step_tmp=cv_contourMask.clone();
    cv::Mat maskImage;
    UIImageToMat(pathimg, maskImage,true);
   // m_UIImageToMat1(pathimg, maskImage);
    //大图叠加小区域
    cv::Mat addrect(cv_contourMask,cv::Rect(offset.x,offset.y,pathimg.size.width,pathimg.size.height));
    //maskImage.copyTo(addrect);
    //dst = alpha*src1 + beta*src2 + gamma
    if (self.isErase) {
       // cv::addWeighted(addrect, 0, maskImage, 0, 0, addrect);
        cv::subtract(addrect, maskImage, addrect);
    }
    else
    {
        //dst = alpha*src1 + beta*src2 + gamma
        cv::addWeighted(addrect, 1, maskImage, 1, 0, addrect);
    }

代码片段2

//二值
        cv::threshold(tempImage,tempImage,thresh,255,cv::THRESH_BINARY);
         int c= tempImage.channels();
        //UIImage *img2=MatToUIImage(tempImage);//调试显示图片
        //根据中心点的颜色值来确定有效的位置
        int tw=tempImage.cols;
        int th=tempImage.rows;
        int center=tempImage.at<uchar>(th/2,th/2);
        
        int x0=tw/2;
        int y0=th/2;
        
       
        if(center==0)
        {
            //中心点为黑色,翻转图片颜色
            for(int i=0;i<tw;i++)
              {
                for(int j=0;j<th;j++)
                 {
                     if (tempImage.at<uchar>(j,i)==0) {
                         tempImage.at<uchar>(j,i)=255;
                
                     }
                     else
                     {
                        tempImage.at<uchar>(j,i)=0;
  

                     }
                }
            }
        }

 2张4同道图片叠加:

void MergeImage(Mat bgImg,Mat fgImg,Mat& dstImg)
{
    dstImg=bgImg.clone();
    printf("%d",bgImg.channels());
    printf("%d",fgImg.channels());
    for (int y = 0; y < fgImg.rows; y++)
    {

        const cv::Vec4b* fgImg_pixel = fgImg.ptr<cv::Vec4b>(y);
        cv::Vec4b* dstImg_pixel = dstImg.ptr<cv::Vec4b>(y);
        for (int x = 0; x < fgImg.cols; x++,++fgImg_pixel, ++dstImg_pixel)
        {
            double alpha = (*fgImg_pixel).val[3]/255.0;
            (*dstImg_pixel).val[0]=(*fgImg_pixel).val[0]*alpha+(*dstImg_pixel).val[0]*(1-alpha);
            (*dstImg_pixel).val[1]=(*fgImg_pixel).val[1]*alpha+(*dstImg_pixel).val[1]*(1-alpha);
            (*dstImg_pixel).val[2]=(*fgImg_pixel).val[2]*alpha+(*dstImg_pixel).val[2]*(1-alpha);
         
        }
    }
    

}

 

转载于:https://www.cnblogs.com/bandy/p/4349913.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值