opencv 获取图像宽高通道、图像缩放,图像转换、画直线,多线段,多边形,矩形, 多边形填充等
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
//#include <opencv2/video.hpp>
#include <array>
#include <opencv.hpp>
using namespace std;
//using namespace cv;
int main()
{
printf("123456\n");
cout << "built with opencv" << CV_VERSION << endl; //打印opencv版本
cv::Mat image = cv::imread("C:/Users/fankuikui/Desktop/测试图像结果/detect_out/20200904102902001573.png");
int w = image.cols;
int h = image.rows;
int c = image.channels();
printf("org images shape: [%d, %d, %d]\n", w, h, c);
int ww = image.size().width;
int hh = image.size().height;
printf("org images shape: [%d, %d, %d]", ww, hh, c); //同上面
cv::imshow("原图", image);
cv::waitKey(0);
// 缩放图
cv::Mat reimg, grayimg;
cv::resize(image, reimg, cv::Size(500, 500));
//cv::imshow("缩放图", reimg);
//cv::waitKey(0);
// 灰度图
//cv::cvtColor(reimg, grayimg, CV_RGB2GRAY); //cv::cvtColor(reimg, grayimg, CV_BGR2GRAY);
//cv::imshow("灰度图", grayimg);
//cv::waitKey(0);
//cv::line(reimg, cv::Point(0, 100), cv::Point(500, 100), cv::Scalar(0, 0, 255)); //画直线, 注:坐标原点在左上角,Point(x, y)
//cv::line(reimg, cv::Point(0, 250), cv::Point(500, 100), cv::Scalar(255, 0, 0), 5, 8); //画直线, 注:坐标原点在左上角,Point(x, y) 其中5,8表示线宽和线型
//cv::rectangle(reimg, cv::Point(100, 100), cv::Point(375, 375), cv::Scalar(0, 255, 255), 2, 8);//画矩形
//cv::circle(reimg, cv::Point(250, 250), 100, cv::Scalar(255, 0, 255)); //画圆
cv::Point vp[1][4];
vp[0][0] = cv::Point(150, 50);
vp[0][1] = cv::Point(250, 200);
vp[0][2] = cv::Point(150, 350);
vp[0][3] = cv::Point(50, 200);
const cv::Point* ppt[1] = { vp[0] };
int npt[] = { 4 };
cv::polylines(reimg, ppt, npt, 1, true, cv::Scalar(0, 255, 255), 1, 8); //其中true表示自动封闭多边形, 1,8表示线宽和线型
//cv::polylines(reimg, ppt, npt, 1, false, cv::Scalar(0, 255, 255), 1, 8); //其中false表示自动不封闭多边形, 1,8表示线宽和线型
//填充多边形
cv::Point vp_2[1][4];
vp_2[0][0] = cv::Point(200, 100);
vp_2[0][1] = cv::Point(400, 200);
vp_2[0][2] = cv::Point(400, 300);
vp_2[0][3] = cv::Point(200, 500);
const cv::Point* ppt_2[1] = { vp_2[0] };
int npt_2[] = { 4 };
cv::fillPoly(reimg, ppt_2, npt_2, 1, cv::Scalar(255, 0, 255), 8); //其中true表示自动封闭多边形, 8表示线型
//cv::fillPoly(reimg, vPloygonPoint, cv::Scalar(0, 255, 255), 8); //其中true表示自动封闭多边形, 8表示线型
cv::imshow("划线图", reimg);
cv::waitKey(0);
//保存图像
//cv::imwrite("C:/Users/fankuikui/Desktop/test_gray_img.bmp", grayimg);
//cv::imwrite("C:/Users/fankuikui/Desktop/test_gray_img.png", grayimg);
cv::imwrite("C:/Users/fankuikui/Desktop/test_gray_img.jpg", reimg);
return 0;
// 方法2,网上提供的此方法 没跑通
/*
//画多边形
vector<Point> vPloygonPoint;
vPloygonPoint.push_back(Point(0, 0));
vPloygonPoint.push_back(Point(20, 50));
vPloygonPoint.push_back(Point(50, 100));
vPloygonPoint.push_back(Point(100, 100));
polylines(reimg, vPloygonPoint, true, cv::Scalar(0, 255, 255), 2, 8); //其中true表示自动封闭多边形, 2,8表示线宽和线型
//填充多边形
vPloygonPoint.clear();
vPloygonPoint.push_back(cv::Point(150, 50));
vPloygonPoint.push_back(cv::Point(250, 200));
vPloygonPoint.push_back(cv::Point(150, 350));
vPloygonPoint.push_back(cv::Point(50, 200));
cv::fillPoly(reimg, vPloygonPoint, cv::Scalar(0, 255, 255), 8); //其中true表示自动封闭多边形, 8表示线型
*/
}