学习opencv 课后8.5
2018-03-29 09:50
288 查看
#include "stdafx.h"
#include "highgui.hpp"
#include "cv.hpp"
#include "iostream"
using namespace std;
using namespace cv;
int main()
{
//读入图像
Mat src = imread("H:\\circle.png", 0);
if (src.empty())
{
cout << "Load image error!" << endl;
return(-1);
}
imshow("source image", src);
//canny
Mat edges;
Canny(src, edges, 100, 255);
//检测轮廓
vector<vector<Point>>contours;
vector<Vec4i>hierarchy;
findContours(edges, contours, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
cout << "The contours number is " <<contours.size() << endl;
//画轮廓
Scalar color = Scalar(255, 255, 255);
for (int i = 0; i < contours.size(); i++)
{
drawContours(edges, contours, i, color, 1, 8);
}
imshow("contours image", edges);
cout << "---------------------------------------------------" << endl;
//计算轮廓长度
for (int i = 0; i < contours.size(); i++)
{
double con_length = arcLength(contours[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length << endl;
}
//使用approxPolyDP逼近
// 1.创建存放近似点的vector
vector<vector<Point>>contours_90(contours.size());
vector<vector<Point>>contours_66(contours.size());
vector<vector<Point>>contours_11(contours.size());
vector<vector<Point>>contours_10(contours.size());
// 2.用来存放逼近图像
Mat img_90(edges.size(), CV_8UC3, Scalar::all(0));
Mat img_66(edges.size(), CV_8UC3, Scalar::all(0));
Mat img_11(edges.size(), CV_8UC3, Scalar::all(0));
Mat img_10(edges.size(), CV_8UC3, Scalar::all(0));
cout << " 9 0 ---------------------------------------------" << endl;
for (int i = 0; i < contours.size(); i++) {
//逐点近似
approxPolyDP(contours[i], contours_90[i],1.0/90, true);
drawContours(img_90, contours_90, i, color);
double con_length_90 = arcLength(contours_90[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length_90 << endl;
}
imshow("90", img_90);
cout << " 6 6 ---------------------------------------------" << endl;
for (int i = 0; i < contours.size(); i++) {
approxPolyDP(contours[i], contours_66[i], 1.0 / 66, true);
drawContours(img_66, contours_66, i, color);
double con_length_66 = arcLength(contours_66[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length_66 << endl;
}
imshow("66", img_66);
cout << " 1 1 ---------------------------------------------" << endl;
for (int i = 0; i < contours.size(); i++) {
approxPolyDP(contours[i], contours_11[i], 1.0 / 11, true);
drawContours(img_11, contours_11, i, color);
double con_length_11 = arcLength(contours_11[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length_11 << endl;
}
imshow("11", img_11);
cout << " 1 0 ---------------------------------------------" << endl;
for (int i = 0; i < contours.size(); i++) {
approxPolyDP(contours[i], contours_10[i], 1.0 / 10, true);
drawContours(img_10, contours_10, i, color);
double con_length_10 = arcLength(contours_10[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length_10 << endl;
}
imshow("10", img_10);
while (1) {
if (waitKey(15) == 27)
break;
}
return 0;
}
#include "highgui.hpp"
#include "cv.hpp"
#include "iostream"
using namespace std;
using namespace cv;
int main()
{
//读入图像
Mat src = imread("H:\\circle.png", 0);
if (src.empty())
{
cout << "Load image error!" << endl;
return(-1);
}
imshow("source image", src);
//canny
Mat edges;
Canny(src, edges, 100, 255);
//检测轮廓
vector<vector<Point>>contours;
vector<Vec4i>hierarchy;
findContours(edges, contours, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
cout << "The contours number is " <<contours.size() << endl;
//画轮廓
Scalar color = Scalar(255, 255, 255);
for (int i = 0; i < contours.size(); i++)
{
drawContours(edges, contours, i, color, 1, 8);
}
imshow("contours image", edges);
cout << "---------------------------------------------------" << endl;
//计算轮廓长度
for (int i = 0; i < contours.size(); i++)
{
double con_length = arcLength(contours[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length << endl;
}
//使用approxPolyDP逼近
// 1.创建存放近似点的vector
vector<vector<Point>>contours_90(contours.size());
vector<vector<Point>>contours_66(contours.size());
vector<vector<Point>>contours_11(contours.size());
vector<vector<Point>>contours_10(contours.size());
// 2.用来存放逼近图像
Mat img_90(edges.size(), CV_8UC3, Scalar::all(0));
Mat img_66(edges.size(), CV_8UC3, Scalar::all(0));
Mat img_11(edges.size(), CV_8UC3, Scalar::all(0));
Mat img_10(edges.size(), CV_8UC3, Scalar::all(0));
cout << " 9 0 ---------------------------------------------" << endl;
for (int i = 0; i < contours.size(); i++) {
//逐点近似
approxPolyDP(contours[i], contours_90[i],1.0/90, true);
drawContours(img_90, contours_90, i, color);
double con_length_90 = arcLength(contours_90[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length_90 << endl;
}
imshow("90", img_90);
cout << " 6 6 ---------------------------------------------" << endl;
for (int i = 0; i < contours.size(); i++) {
approxPolyDP(contours[i], contours_66[i], 1.0 / 66, true);
drawContours(img_66, contours_66, i, color);
double con_length_66 = arcLength(contours_66[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length_66 << endl;
}
imshow("66", img_66);
cout << " 1 1 ---------------------------------------------" << endl;
for (int i = 0; i < contours.size(); i++) {
approxPolyDP(contours[i], contours_11[i], 1.0 / 11, true);
drawContours(img_11, contours_11, i, color);
double con_length_11 = arcLength(contours_11[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length_11 << endl;
}
imshow("11", img_11);
cout << " 1 0 ---------------------------------------------" << endl;
for (int i = 0; i < contours.size(); i++) {
approxPolyDP(contours[i], contours_10[i], 1.0 / 10, true);
drawContours(img_10, contours_10, i, color);
double con_length_10 = arcLength(contours_10[i], true);
cout << "用轮廓长度计算函数计算出来的第" << i << "个轮廓长度为:" << con_length_10 << endl;
}
imshow("10", img_10);
while (1) {
if (waitKey(15) == 27)
break;
}
return 0;
}
相关文章推荐
- 学习opencv 课后8.5
- 学习OpenCV 第四章课后题第一题(合并图像、缩放、字体)
- 学习OpenCV课后题3.6
- 学习OpenCV课后题3.7
- 学习OpenCV课后题4.2
- 学习Opencv第3章课后习题
- 基于QT5的opencv学习之《学习opencv课后练习3-7》
- 学习OpenCV课后题3.8(b)
- 学习opencv第二章课后题4,5
- 学习Opencv第2章课后习题
- 读取视频文件存盘(学习openCV课后题2.3)
- 学习OpenCV课后题4.3
- 学习Opencv第4章课后习题
- 读取摄像头并存盘(学习openCV课后题2.3改进)
- 学习OpenCV课后题4.4
- 学习opencv课后答案第三章
- 学习OpenCV课后题4.5(有点糙)
- 读取摄像头数据(学习openCV课后题 2.4)
- 学习OpenCV课后题4.7
- 学习OpenCV第三章课后题(打卡)