#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>
using namespace cv;
using namespace std;
int g_nThred = 100;
int g_nWay = 0;
int g_nThick = 3;
int g_nGrayOrBgr = 0;
int g_nColor = 0;
int g_nBlue = 255, g_nGreen = 255, g_nRed = 0;
int g_nBilateralFilterValue = 0;
int g_nCurrValue = 166, g_nP = 0;
int main()
{
Mat srcImage = imread("group.jpg");
imshow("【原图】", srcImage);
Mat grayImage;
cvtColor(srcImage, grayImage, CV_BGR2GRAY);
Mat midImage;
grayImage.copyTo(midImage);
//对灰度图和3通道图进行双边滤波
bilateralFilter(midImage, grayImage, g_nBilateralFilterValue, (g_nBilateralFilterValue) * 2
, (g_nBilateralFilterValue) / 2);
namedWindow("【滚动条窗口】", 0);
createTrackbar("Thred", "【滚动条窗口】", &g_nThred, 255, 0);
createTrackbar("Way", "【滚动条窗口】", &g_nWay, 3, 0);
createTrackbar("Thick", "【滚动条窗口】", &g_nThick, 100, 0);
createTrackbar("Gray/Bgr", "【滚动条窗口】", &g_nGrayOrBgr, 1, 0);
createTrackbar("Color", "【滚动条窗口】", &g_nColor, 1, 0);
createTrackbar("Blue", "【滚动条窗口】", &g_nBlue, 255, 0);
createTrackbar("Green", "【滚动条窗口】", &g_nGreen, 255, 0);
createTrackbar("CurrValue", "【滚动条窗口】", &g_nCurrValue, 255, 0);
createTrackbar("BilateralFilterValue", "【滚动条窗口】", &g_nBilateralFilterValue, 100, 0);
Mat cannyImage;
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
Mat dstImage;
Scalar color;
char key;
while (1)
{
Canny(grayImage, cannyImage, (double)g_nCurrValue, (double)((g_nCurrValue + 1) * (2 + g_nP / 100.0)), 3);
imshow("【边缘检测后的图像】", cannyImage);
//进行轮廓检测
findContours(cannyImage, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
//绘制多个轮廓,绘制一个轮廓的函数为:drawContours函数
if (!g_nGrayOrBgr)
srcImage.copyTo(dstImage);
else
grayImage.copyTo(dstImage);
for (int i = 0; i >= 0; i = hierarchy[i][g_nWay])
{
if (!g_nColor)
color = Scalar(g_nBlue, g_nGreen, g_nRed);
else
color = Scalar(rand() & 255, rand() & 255, rand() & 255);
drawContours(dstImage, contours, i, color, g_nThick + 1, 8, hierarchy);
}
imshow("【绘制轮廓后的图像】", dstImage);
key = waitKey(1);
if (key == 27)
break;
}
return 0;
}
opencv3中Canny算子下的轮廓检测与绘制
最新推荐文章于 2025-06-18 09:26:25 发布