API原型:
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
int thickness = 1, int lineType = LINE_8, int shift = 0);
参数解释:
img:要绘图的画布
pt1:初始点
pt2:目标点
color:线条颜色
thickness:线条宽度
lineType:线形
shift:图像偏移(可以相对的移动位置和放缩自己大小)
示例:
using namespace cv;
using namespace std;
int main()
{
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
line(canvas, Point(10, 10), Point(300, 300), Scalar(0, 0, 255), 1, 8);
imshow("canvas", canvas);
waitKey(0);
destroyAllWindows();
return 0;
}
画圆
API原型:
void circle(InputOutputArray img, Point center, int radius,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
参数解释:
img:要绘图的画布
center:圆心位置
radius:半径
color:颜色
thickness:线条厚度,如果小于0也就是-1的话则填充圆形内部
lineType:线形
shift:偏移
示例:
using namespace cv;
using namespace std;
int main()
{
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
circle(canvas, Point(256, 256), 128, Scalar(0, 0, 255), -1, 8);
imshow("canvas", canvas);
waitKey(0);
destroyAllWindows();
return 0;
}
画矩形
API原型:
void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
void rectangle(InputOutputArray img, Rect rec,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("E:/opencv_source/opencv/sources/samples/data/chicky_512.png",IMREAD_GRAYSCALE);
imshow("src", src);
int h = src.rows;
int w = src.cols;
int channels = src.channels();
double min_val, max_val;
Point minLoc;
Point maxLoc;
minMaxLoc(src, &min_val, &max_val, &minLoc, &maxLoc);//针对单通道Mat对象
printf("minVal:%.2f,loc:(%d,%d)\nmaxVal:%.2f,loc:(%d,%d)\n", min_val, minLoc.x, minLoc.y, max_val, maxLoc.x, maxLoc.y);
waitKey(0);
destroyAllWindows();
return 0;
}
均值和方差
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("E:/opencv_source/opencv/sources/samples/data/chicky_512.png");
imshow("src", src);
int h = src.rows;
int w = src.cols;
int channels = src.channels();
Scalar s = mean(src);//计算每个通道的平均像素值
printf("mean channel B:%.2f,mean channel G:%.2f,mean channel R:%.2f\n", s[0], s[1], s[2]);
waitKey(0);
destroyAllWindows();
return 0;
}
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("E:/opencv_source/opencv/sources/samples/data/chicky_512.png");
imshow("src", src);
int h = src.rows;
int w = src.cols;
int channels = src.channels();
Mat mm, mstd;
meanStdDev(src, mm, mstd);
printf("mean:%.2f,%.2f,%.2f\n", mm.at<double>(0, 0), mm.at<double>(1, 0), mm.at<double>(2, 0));
printf("std:%.2f,%.2f,%.2f\n", mstd.at<double>(0, 0), mstd.at<double>(1, 0), mstd.at<double>(2, 0));
waitKey(0);
destroyAllWindows();
return 0;
}