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); } } }