c++版本opencv计算灰度图像的轮廓点

代码

cpp 复制代码
#include<iostream>
#include<opencv.hpp>


int main()
{
	std::string imgPath("D:\\prostate_run\\result_US_20230804_141531\\mask\\us\\104.bmp");
	cv::Mat imgGray = cv::imread(imgPath, 0);

	cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
	cv::morphologyEx(imgGray, imgGray, cv::MORPH_OPEN, kernel);
	
	/*cv::imshow("w", imgGray);
	cv::waitKey();*/

	// 二值化
	cv::Mat binary;
	cv::threshold(imgGray, binary, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);

	/*cv::imshow("w", binary);
	cv::waitKey();*/

	std::vector<std::vector<cv::Point>> contours;
	std::vector<cv::Vec4i> hierachy;
	cv::findContours(binary, contours, hierachy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);

	std::cout << contours.size() << std::endl;

	// 
	cv::Mat contourImage = cv::Mat::zeros(imgGray.size(), CV_8UC3);
	cv::Scalar redColor = cv::Scalar(0, 0, 255);
	cv::drawContours(contourImage, contours, 0, redColor, 1, cv::LINE_8);
	/*cv::imshow("w", contourImage);
	cv::waitKey();*/

	//
	std::cout << contours[0].size() << std::endl;
	cv::Mat contourImage2 = cv::Mat::zeros(imgGray.size(), CV_8UC3);
	
	for (int i = 0; i < contours[0].size(); ++i)
	{
		cv::Point point = contours[0][i];

		cv::circle(contourImage2, point, 1, redColor, -1);

	}
	cv::imshow("w2", contourImage2);
	cv::waitKey();

	return 0;
}
相关推荐
JoannaJuanCV2 分钟前
自动驾驶—CARLA仿真(6)vehicle_gallery demo
人工智能·机器学习·自动驾驶·carla
Hundred billion16 分钟前
深度学习基本原理和流程
人工智能·深度学习
周杰伦_Jay19 分钟前
【大模型数据标注】核心技术与优秀开源框架
人工智能·机器学习·eureka·开源·github
Jay200211121 分钟前
【机器学习】33 强化学习 - 连续状态空间(DQN算法)
人工智能·算法·机器学习
Learn Forever29 分钟前
由ChatGPT 的记忆系统谈及如何构建一个对话应用智能体
人工智能
獭.獭.31 分钟前
C++ -- STL【unordered_set和unordered_map的使用】
c++·stl·unordered_map·unordered_set
资深低代码开发平台专家40 分钟前
GPT-5.2与Gemini 3.0终极抉择:谁更适配你的需求?
人工智能·gpt·ai
得贤招聘官1 小时前
AI招聘的核心破局:从“流程装饰”到“决策引擎”
人工智能
一水鉴天1 小时前
整体设计 定稿 之26 重构和改造现有程序结构 之2 (codebuddy)
开发语言·人工智能·重构·架构
cici158741 小时前
二值化断裂裂缝的智能拼接算法
人工智能·算法·计算机视觉