利用opencv中的drawContours和copyTo剪裁图像

给出区域轮廓点集,通过drawContours函数填充区域,生成mask掩模,然后利用copyTo得到剪裁图像。

注意:这些轮廓的点的坐标必须是int型的,利用perspectiveTransform得到的物体轮廓坐标不是整形,必须转成整型才可以利用drawContours得到mask掩模。否则会有很多的Assertion错误。

主要代码

#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;

int main()
{
    Mat src = imread("F:/testdata/input.png");
    Mat mask = Mat::zeros(src.size(), CV_8UC1);
    Mat dst;
    vector<vector<Point2i>> contours;
    vector<Point2i> points;
    points.push_back(Point2i(100, 100));
    points.push_back(Point2i(50, 150));
    points.push_back(Point2i(100, 200));
    points.push_back(Point2i(200, 200));
    points.push_back(Point2i(220, 150));
    points.push_back(Point2i(200, 100));
    contours.push_back(points);
    drawContours(mask, contours, 0, Scalar::all(255), -1);
    imshow("src", src);
    src.copyTo(dst, mask);
    imshow("dst", dst);
    waitKey(0);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++使用OpenCV的`drawContours`函数可以绘制轮廓。该函数的语法如下: ```cpp void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness = 1, int lineType = LINE_8, InputArray hierarchy = noArray(), int maxLevel = INT_MAX, Point offset = Point()) ``` 参数解释: - `image`:输入输出图像,即要在其上绘制轮廓的图像。 - `contours`:轮廓点序列的向量,每个向量存储一个轮廓。多个轮廓存储在一个向量。 - `contourIdx`:要绘制的轮廓的索引,若为负数则绘制所有轮廓。 - `color`:轮廓线条的颜色。 - `thickness`:轮廓线条的宽度,默认值为1。 - `lineType`:线条类型,可以是`LINE_8`或`LINE_4`。 - `hierarchy`:可选的输入向量,存储轮廓的层次结构信息。 - `maxLevel`:绘制轮廓的最大层级。 - `offset`:偏移量,即从轮廓到图像的偏移量。 示例代码: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat img = imread("test.jpg"); cvtColor(img, img, COLOR_BGR2GRAY); threshold(img, img, 100, 255, THRESH_BINARY_INV); std::vector<std::vector<Point>> contours; findContours(img, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE); Mat dst = Mat::zeros(img.size(), CV_8UC3); for (int i = 0; i < contours.size(); i++) { Scalar color = Scalar(rand() % 256, rand() % 256, rand() % 256); drawContours(dst, contours, i, color, 2); } imshow("contours", dst); waitKey(0); return 0; } ``` 以上代码加载一张图片,将其转换为灰度图并二值化。然后使用`findContours`函数获取轮廓点的向量,最后使用`drawContours`函数绘制轮廓线条。在绘制时可以设置每个轮廓的颜色和宽度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值