opencv裁剪图像(不规则裁剪)
参考博客:
https://www.jianshu.com/p/274d6302f556
代码:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("../test.png");
// set window size
cv::namedWindow("src",0);
cv::resizeWindow("src",1280,760);//width height
imshow("src", src);
waitKey(0);
Mat mask = Mat::zeros(src.size(), CV_8UC1);
Mat dst;
vector<vector<Point2i>> contours;
vector<Point2i> points;
// 逆时针画出轮廓 箭头形状
// points.push_back(Point2i(300, 300));
// points.push_back(Point2i(50, 500));
// points.push_back(Point2i(300, 700));
// points.push_back(Point2i(600, 700));
// points.push_back(Point2i(600, 300));
// 扇形
points.push_back(Point2i(0, 0));
points.push_back(Point2i(500, 900));
points.push_back(Point2i(1000, 0));
contours.push_back(points);
//裁剪
drawContours(mask, contours, 0, Scalar::all(255), -1);
src.copyTo(dst, mask);
imshow("src", src);
waitKey(0);
// set window size
cv::namedWindow("dst",0);
cv::resizeWindow("dst",1280,760);
cv::imwrite("dst.png",dst);
imshow("dst", dst);
waitKey(0);
return 0;
}
实现效果:
cmakelist
cmake_minimum_required( VERSION 2.8 )
project( caijian )
# 添加c++ 11标准支持
set( CMAKE_CXX_FLAGS "-std=c++11" )
# 寻找OpenCV库
find_package( OpenCV REQUIRED )
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( caijian caijian.cpp )
# 链接OpenCV库
target_link_libraries( caijian ${OpenCV_LIBS} )