C++ 之 opencv 获取图像宽高通道、图像缩放,图像转换、画直线,多线段,多边形,矩形, 多边形填充等

这段代码展示了如何使用OpenCV库进行图像处理,包括读取图像、获取图像的宽、高和通道数,图像缩放,以及绘制直线、多边形和填充多边形。通过`cv::resize`函数实现图像尺寸调整,`cv::line`和`cv::polylines`用于绘制线条和多边形,`cv::fillPoly`进行多边形填充。最后显示和保存处理后的图像。
摘要由CSDN通过智能技术生成

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表示线型

*/

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值