OpenCV 提取轮廓

部署运行你感兴趣的模型镜像
#include "opencv2/imgproc/imgproc.hpp"    
#include "opencv2/highgui/highgui.hpp"    

#include <iostream>    

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	string filename[] = { "C:\\Users\\Administrator\\Desktop\\IMG_3454.jpg" };

	Mat in = imread(filename[0], 1);
	Mat img, gray, out, canny;
	in.copyTo(img);

	cvtColor(img, gray, COLOR_BGR2GRAY);
	in.copyTo(out);
	imshow("gray", gray);
	Canny(gray, canny, 80, 255);


	vector<vector<Point>> contours;
	findContours(canny, contours, CV_RETR_CCOMP, CV_RETR_FLOODFILL);

	drawContours(out, contours, -1, Scalar(0,255,0));

	for each (vector<Point> points in contours)
	{
		RotatedRect rRect = minAreaRect(points);
		Point2f vertices[4];      //定义矩形的4个顶点  
		rRect.points(vertices);   //计算矩形的4个顶点  
		for (int i = 0; i < 4; i++)
			line(out, vertices[i], vertices[(i + 1) % 4], Scalar(0, 255, 255));
	}

	for each (vector<Point> points in contours)
	{
		Rect rect = boundingRect(points);
		rectangle(out, rect, Scalar(255,0,0));
	}

	imshow("contours", out);
 
	waitKey(0);
	return 0;
}

转载于:https://my.oschina.net/wellsoschina/blog/1587464

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

### 使用 OpenCV 进行图像轮廓提取 为了使用 OpenCV 实现图像轮廓提取,需先确保已安装 OpenCV 库[^2]。如果尚未安装,可以通过 `pip` 安装: ```bash pip install opencv-python ``` #### 准备工作 加载待处理的图像并将其转换为灰度图像是必要的预处理步骤之一。这一步骤有助于减少数据量以及去除颜色信息带来的干扰。 ```python import cv2 import numpy as np # 加载彩色图片作为灰度图 img_gray = cv2.imread('image_path', cv2.IMREAD_GRAYSCALE) if img_gray is None: raise ValueError("未能读取指定路径下的文件,请确认路径正确无误") ``` #### 边缘检测 应用边缘检测算法(如 Canny 算法),能够帮助识别物体边界上的像素点集合。这些像素点构成了后续寻找轮廓的基础。 ```python edges = cv2.Canny(img_gray, threshold1=50, threshold2=150) ``` #### 寻找轮廓 利用 `cv2.findContours()` 函数来获取二值化后的图像中的所有轮廓。此函数返回两个值:一个是修改过的图像;另一个是轮廓本身及其层次结构列表。 ```python contours, hierarchy = cv2.findContours(edges.copy(), mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_SIMPLE)[-2:] ``` 注意,在不同版本的 OpenCV 中,`findContours` 的返回值可能有所不同。上述代码适用于大多数情况,但对于某些特定版本,可能需要调整索引来访问所需的变量。 #### 绘制轮廓 最后,可以将找到的轮廓绘制到原始图像上以便可视化效果。这里可以选择只画出面积较大的轮廓以突出显示主要对象。 ```python drawing = np.zeros((img_gray.shape[0], img_gray.shape[1], 3), dtype=np.uint8) for i in range(len(contours)): area = cv2.contourArea(contours[i]) if area > 100: # 只保留较大区域的轮廓 color = (np.random.randint(0, 256), np.random.randint(0, 256), np.random.randint(0, 256)) cv2.drawContours(drawing, contours, i, color=color, thickness=2) cv2.imshow('Contours', drawing) cv2.waitKey() cv2.destroyAllWindows() ``` 以上就是完整的基于 OpenCV 的图像轮廓提取流程介绍[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值