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);//合并
感兴趣空间操作:
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);
}