openCV C++ 代码笔记

时间:2023-03-09 06:19:55
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, , maskImage, , , addrect);
}

代码片段2

//二值
cv::threshold(tempImage,tempImage,thresh,,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/,th/); int x0=tw/;
int y0=th/; if(center==)
{
//中心点为黑色,翻转图片颜色
for(int i=;i<tw;i++)
{
for(int j=;j<th;j++)
{
if (tempImage.at<uchar>(j,i)==) {
tempImage.at<uchar>(j,i)=; }
else
{
tempImage.at<uchar>(j,i)=; }
}
}
}

2张4同道图片叠加:

void MergeImage(Mat bgImg,Mat fgImg,Mat& dstImg)
{
dstImg=bgImg.clone();
printf("%d",bgImg.channels());
printf("%d",fgImg.channels());
for (int y = ; 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 = ; x < fgImg.cols; x++,++fgImg_pixel, ++dstImg_pixel)
{
double alpha = (*fgImg_pixel).val[]/255.0;
(*dstImg_pixel).val[]=(*fgImg_pixel).val[]*alpha+(*dstImg_pixel).val[]*(-alpha);
(*dstImg_pixel).val[]=(*fgImg_pixel).val[]*alpha+(*dstImg_pixel).val[]*(-alpha);
(*dstImg_pixel).val[]=(*fgImg_pixel).val[]*alpha+(*dstImg_pixel).val[]*(-alpha); }
} }