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;
}
相关推荐
AGI_Eval1 分钟前
关于Vibe Coding的现状思考:AI时代下编程形式的新探索与边界
人工智能
sunywz5 分钟前
【AI RAG知识库】05.【导入】【节点1】node_entry
人工智能
ShyanZh10 分钟前
【skills】01-Superpowers全景:让AI Agent也讲工程纪律
人工智能·skill·superpower
汉克老师15 分钟前
GESP2026年6月认证C++六级( 第三部分编程题(2、满二叉树))精讲
c++·深度优先·树形dp·满二叉树·gesp六级·树形dfs
大龙谈智能内容15 分钟前
做DITA文档,用Oxygen AI还是Claude Code?
人工智能
大爱一家盟17 分钟前
告别卡点BGM同质化 2026原创卡点音乐素材下载网站 TOP5 推荐
大数据·前端·人工智能
hey2020052823 分钟前
AI生图软件哪个好用?
人工智能·ai·ai作画·aigc
tuddy78946443 分钟前
Codex++ 安全边界探秘:从模型能力到风险防御
人工智能·python·安全
zzgnbfd65881 小时前
2026最新vibe coding入门实战:零基础快速落地全流程实测
人工智能·microsoft
2601_956865771 小时前
2026电商内容创作工具推荐:AI生成电商短视频的工具有哪些,哪个最划算?
人工智能·aigc