轮廓提取
findContours发现轮廓
findContours(
InputOutputArray binImg, //输入8bit图像,0值像素值不变,非0的像素看成1;(变为二值图像)
OutputArrayOfArrays contours,//输出找到的轮廓对象
OutputArray, hierachy// 图像的拓扑结构
int mode, //轮廓返回的模式(RETR_TREE等)
int method,//发现方法(CHAIN_APPROX_SIMPLE等)
Point offset=Point()//轮廓像素的位移(默认没有位移(0, 0))
)
【报错问题】
findContours()有时会报告“已触发了一个断点”等错误,尝试过y有效的解决方法有:
1.为vector提前申请一定的空间,如
std::vector<:vector>> contours(500)
2.Debug版切换为Release版;
drawContours绘制轮廓
drawContours(
InputOutputArray binImg, // 输出图像
OutputArrayOfArrays contours,//找到的全部轮廓对象
Int contourIdx//轮廓索引号
const Scalar & color,//绘制颜色
int thickness,//绘制线宽
int lineType ,//线的类型(默认8)
InputArray hierarchy,//拓扑结构图
int maxlevel,//最大层数(0只绘制当前的,1表示绘制绘制当前及其内嵌的轮廓)
Point offset=Point()//轮廓位移
)
示例:
#include
using namespace cv;
int main()
{
Mat src,dst;
src = imread("E:/image/image/shape.jpg");
if(src.empty())
{
printf("can not load image \n");
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
dst = Mat::zeros(src.size(), CV_8UC3);
blur(src,src,Size(3,3));
cvtColor(src,src,COLOR_BGR2GRAY);
Canny(src, src, 20, 80, 3, false);
std::vector<:vector>> contours;
std::vector hierarchy;
findContours(src, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
RNG rng(0);
for