基于C++的OpenCV项目实战——物品检测(降噪、去除背景、连通域检测、轮廓定位)

感谢

基于C++的OpenCV项目实战——零部件的自动光学检测_opencv 滤波增强 零件测量-CSDN博客

基于opencv的c++图像处理(图像二值化)_opencv c++ 二值化-CSDN博客

代码实现

main函数

#include<opencv2/opencv.hpp>
#include<iostream>
#include<string>

#include "Display.h"
#include "Blur.h"
using namespace cv;
using namespace std;

// 使用智能指针
shared_ptr<Display> multi_window;

int main(int argc, char** argv)
{

	//图片和背景图
	String total_path = "./resource/原图.jpeg";
	String background_path = "./resource/背景图.jpg";
	Mat image = imread(total_path);
	Mat backgroud_image = imread(background_path);

	//图片去噪处理
	Mat image_denoising = image.clone();
	Mat backgroud = backgroud_image.clone();
	Blur br;
	image_denoising = br.smooth_image(image);
	backgroud = br.smooth_image(backgroud_image);

	//去除背景
	Mat image_no_backgroud = br.remove_background_minus(image_denoising, backgroud);
	
	//连通域检测
	Mat image_connection_check = br.connection_check(image_no_backgroud);

	// 边缘检测
	Mat image_contour = br.get_contour(image_no_backgroud);

	//展示

	multi_window = make_shared<Display>("Review for all", 3, 2, WINDOW_NORMAL);
	multi_window->add_window("image", image);
	multi_window->add_window("denoise", image_denoising);
	multi_window->add_window("bg", backgroud);
	multi_window->add_window("remove bg", image_no_backgroud);
	multi_window->add_window("segment", image_connection_check);
	multi_window->add_window("contour", image_contour);

	// 保存结果
	imwrite("./result/结果展示.png", multi_window->canvas);
	waitKey(0);
	return 0;
}

构建多窗口展示Display类

Display.cpp文件

#include "Display.h"

//初始化窗口
Display::Display(String t, int c, int r, int flags) :title(t), cols(c), rows(r) {
	height = 1080;
	width = 1920;
	namedWindow(title, flags);
	canvas = Mat(heigh
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值