欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

opencv 学习笔记(二)

程序员文章站 2022-07-13 21:52:19
...
cv::saturate_cast()  //对计算结果进行截断,并取整
rstImg.row(0).setTo(cv::Scalar(0,0,0));  //将第0行的所有像素设置为黑色

自定义内核

void sharpen2D(cv::Mat &image, cv::Mat &result)//自定义锐化滤波器
{
    cv::Mat kernel(3, 3, CV_32F, cv::Scalar(0));//定义核
    kernel.at<float>(1, 1) = 5.0;
    kernel.at<float>(0, 1) = -1.0;
    kernel.at<float>(1, 0) = -1.0;
    kernel.at<float>(1, 2) = -1.0;
    kernel.at<float>(2, 1) = -1.0;
    cv::filter2D(image, result, image.depth(), kernel);//使图像和核进行卷积
}

重载图像操作符:
图像加减:+ -
位操作符:&、|、^、~
比较操作符:>、<、>=、!=

std::vector<cv::Mat>planes;
cv::split(image,planes);//将三通道图像分离
cv::merge(planes,result);//合并

opencv 学习笔记(二)
opencv 学习笔记(二)
感兴趣空间操作:

int main()
{
    cv::Mat srcImg = cv::imread("0.jpg");
    cv::Mat logoImg = cv::imread("1.jpg");
    cv::Mat imageROI = srcImg(cv::Rect(100, 0, logoImg.cols, logoImg.rows));//感兴趣空间
    //cv::Mat mask = cv::imread("1,jpg", 0);//掩膜
    if (!srcImg.data)
    {
        std::cout << "no data" << std::endl;
        return -1;
    }
    for (int i = 0; i < logoImg.rows; i++)//遍历操作
    {
        cv::Vec3b *data = logoImg.ptr<cv::Vec3b>(i);
        cv::Vec3b *data1 = imageROI.ptr<cv::Vec3b>(i);
        for (int j = 0; j < logoImg.cols; j++)
        {
            if (data[j][0] <= 250 && data[j][1] <= 255 && data[j][2] <= 255)//将logo中白色区域去掉
            {
                data1[j] =data[j];
            }
        }
    }
    //logoImg.copyTo(imageROI, mask);//掩膜加载
    //cv::addWeighted(imageROI, 0, logoImg, 1, 0, imageROI);
    cv::imshow("1",srcImg);
    cvWaitKey(0);
}
相关标签: opencv