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;
}
相关推荐
小宇的天下13 分钟前
HBM(高带宽内存)深度解析:先进封装视角的技术指南
网络·人工智能
九久。14 分钟前
手动实现std:iterator/std:string/std::vector/std::list/std::map/std:set
c++·stl
小羊羊Python16 分钟前
Sound Maze - 基于 SFML+C++14 的音效迷宫开源游戏 | MIT 协议
c++·游戏·开源
rongcj18 分钟前
2026,“硅基经济”的时代正在悄然来临
人工智能
狼叔也疯狂20 分钟前
英语启蒙SSS绘本第一辑50册高清PDF可打印
人工智能·全文检索
txinyu的博客25 分钟前
HTTP服务实现用户级窗口限流
开发语言·c++·分布式·网络协议·http
代码村新手26 分钟前
C++-类和对象(上)
开发语言·c++
txinyu的博客37 分钟前
map和unordered_map的性能对比
开发语言·数据结构·c++·算法·哈希算法·散列表
万行1 小时前
机器学习&第四章支持向量机
人工智能·机器学习·支持向量机
幻云20101 小时前
Next.js之道:从入门到精通
人工智能·python