前言
本文将使用OpenCV C++ 制作九宫格图像。其实原理很简单,就是将一张图像均等分成九份。然后将这九个小块按一定间隔(九宫格效果)拷贝到新画布上就可以啦。
一、九宫格图像
原图如图所示。本案例的需求是希望将图像均等分成九份,制作九宫格图像。首先得将原图均等分成九份。
如图所示。将原图均等分成九份,然后将这每一个小方块按照一定的间隔(九宫格效果)拷贝到新图像就可以了。具体算法思想请看源码注释。
二、源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat src = imread( "test.jpg" ); if (src.empty()) { cout << "No Image!" << endl; system ( "pause" ); return -1; } //原图宽高 int width = src.cols; int height = src.rows; int num = 3; //小方块数量(可实现任意等份分割) //制作九宫格每个小方块宽高 int step_x = width / num; int step_y = height / num; //重新resize图片尺寸 resize(src, src, Size(step_x * num, step_y * num), 1, 1, INTER_LINEAR); int space = 5; //空白间隔(实现九宫格效果) Mat canvas = Mat(Size(src.cols + space * (num-1), src.rows + space * (num - 1)), CV_8UC3, Scalar(255,255,255)); //画布,用来制作九宫格图片 //就图片分成9个小块,将每一小块抠图至画布 for ( int i = 0; i < num; i++) { for ( int j = 0; j < num; j++) { //小方块相对于原图左上角起点 int x = j * step_x; int y = i * step_y; //将小方块抠图至画布。其中,每扣一小块需跳过space空白 src(Rect(x, y, step_x, step_y)).copyTo(canvas(Rect(x + space * j, y + space * i, step_x, step_y))); //rectangle(src, Rect(x, y, step_x, step_y), Scalar(0, 255, 0), 2); } } imshow( "canvas" , canvas); imshow( "test" , src); waitKey(0); system ( "pause" ); return 0; } |
三、效果显示
如图为生成的九宫格图像。
如图为任意等份分割。
总结
本文使用OpenCV C++ 制作九宫格图像,关键步骤有以下几点。
1、将原图均等分成九个小方块
2、将小方块按一定的间隔(九宫格效果)拷贝到新画布上。
到此这篇关于C++ OpenCV实战之制作九宫格图像的文章就介绍到这了,更多相关C++ OpenCV九宫格图像内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/Zero___Chen/article/details/122384684