Opencv 掩膜操作原理与实现 C++

学习掩膜操作主要是为了截取出有用的部分,为后续的机器学习,模型训练提供准备样本

为提取红绿灯部分,需要知道交通信号灯所在坐标,确定坐标,所用软件为画图:
Opencv 掩膜操作原理与实现 C++_第1张图片
代码部分重点介绍掩膜的或运算,彩色部分和黑白的图像混合时,遇到黑色则置为0,即黑色,遇到白色则置为1,即彩色图像原本的颜色:
下面展示一些 内联代码片

#include <opencv2/opencv.hpp>
#include<iostream>
#include <opencv2/core/core.hpp> 
#include <opencv2/imgcodecs.hpp> 
#include <opencv2/highgui/highgui.hpp>
#include<math.h>
#include <stdio.h>

using namespace std;
using namespace cv;
//掩膜操作

int main()
{
	Mat image, mask;
	Rect r1(5, 130, 90, 50);//x,y,rectangel 大小
	Rect r2(173, 130, 50, 50);
	Rect r3(285, 130, 90, 50);
	Mat img1, img2, img3, img4;
	image = imread("C:/Users/WM202/Pictures/4.jpg");//读取对象操作的图片

	mask = Mat::zeros(image.size(), CV_8UC1);//定成黑色
	//对目标区域进行筛选,定成白色
	mask(r1).setTo(255);
	mask(r2).setTo(255);
	mask(r3).setTo(255);
	//进行或运算 原图白色的部分为1 黑色部分为0,彩色部分图形加入填充
	img1 = image(r1);//截取原图形 矩形部分
	image.copyTo(img2, mask);//放入黑色背景
	image.copyTo(img3);
	img3.setTo(0, mask);

	//展示处理过后的图片
	imshow(" Original Image ", image);
	imshow("img2", img2);

	waitKey();
	return 0;
}

最终得到效果:红色信号灯的部分悉数被截取
Opencv 掩膜操作原理与实现 C++_第2张图片

你可能感兴趣的:(opencv,c++,计算机视觉)