C++ OpenCV实战之制作九宫格图像

目录
  • 前言
  • 一、九宫格图像
  • 二、源码
  • 三、效果显示
  • 总结

前言

本文将使用OpenCV C++ 制作九宫格图像。其实原理很简单,就是将一张图像均等分成九份。然后将这九个小块按一定间隔(九宫格效果)拷贝到新画布上就可以啦。

一、九宫格图像

原图如图所示。本案例的需求是希望将图像均等分成九份,制作九宫格图像。首先得将原图均等分成九份。

如图所示。将原图均等分成九份,然后将这每一个小方块按照一定的间隔(九宫格效果)拷贝到新图像就可以了。具体算法思想请看源码注释。

二、源码

#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九宫格图像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++ OpenCV实战之图像全景拼接

    目录 前言 一.OpenCV Stitcher 1.功能源码 2.效果 二.图像全景拼接 1.特征检测 2.计算单应性矩阵 3.透视变换 4.图像拼接 5.功能源码 6.效果 三.源码 总结 前言 本文将使用OpenCV C++ 进行图像全景拼接.目前使用OpenCV对两幅图像进行拼接大致可以分为两类. 一.使用OpenCV内置API Stitcher 进行拼接. 二.使用特征检测算法匹配两幅图中相似的点.计算变换矩阵.最后对其进行透视变换就可以了. 一.OpenCV Stitcher imag

  • C++ OpenCV制作哈哈镜图像效果

    目录 前言 一.凸透镜 1.功能源码 2.效果显示 二.凹透镜 1.功能源码 2.效果显示 三.源码 前言 本文将使用OpenCV C++ 制作哈哈镜图像.其实原理很简单,就是让图像像素扭曲,将像素重新进行映射. 一.凸透镜 制作凸透镜效果(将图像放大).根据网上查找的变换公式: 图像放大:凸透镜 x = (dx / 2)*(sqrt(pow(dx, 2) + pow(dy, 2)) / r) + cx; y = (dy / 2)*(sqrt(pow(dx, 2) + pow(dy, 2)) /

  • 利用C++ OpenCV 实现从投影图像恢复仿射特性

    目录 原理 实现思路 主要代码 原理 我们通过相机拍摄的图片存在各种畸变,其中投影畸变使得原本平行的直线不再平行,就会产生照片中近大远小的效果,要校正这一畸变,书中给了很多方法,这里是其中的一种. 我们可以将投影变换拆分成相似变换.仿射变换和投影变换三部分, 如下图, 其中相似变换和仿射变换不会改变infinite line,只有投影变换会改变.因此只要找到畸变图像中的这条线,就能够恢复图像的仿射特性(相当于逆转投影变换).而要确定这条线的位置,就得至少知道线上的两个点.我们知道,所有平行线的交

  • C++ OpenCV实战之图像透视矫正

    目录 前言 一.图像预处理 二.轮廓提取 1.提取最外轮廓 2.提取矩形四个角点 3.将矩形角点排序 三.透视矫正 四.源码 前言 本文将使用OpenCV C++ 进行图像透视矫正. 一.图像预处理 原图如图所示.首先进行图像预处理.将图像进行灰度.滤波.二值化.形态学等操作,目的是为了下面的轮廓提取.在这里我还使用了形态学开.闭操作,目的是使整个二值图像连在一起.大家在做图像预处理时,可以根据图像特征自行处理. Mat gray; cvtColor(src, gray, COLOR_BGR2G

  • C++ OpenCV实现图像修复功能

    目录 前言 一.OpenCV inpaint 二.源码 三.效果显示 前言 本文将使用OpenCV C++ 对有瑕疵的图像进行修复.OpenCV 提供了inpaint API可进行图像修复. 一.OpenCV inpaint 原图如图所示.本案例的需求是希望能够将图像上的红线给消除.OpenCV 提供的inpaint API能够实现这个效果. void inpaint( InputArray src, 原图 InputArray inpaintMask, 二进制掩模,指示要修复的像素 Outpu

  • C++之OpenCV图像高光调整具体流程

    实现原理 PS中的高光命令是一种校正由于太接近相机闪光灯而有些发白的焦点的方法.在用其他方式采光的图像中,这种调整也可用于使高光区域变暗.要实现图像的高光调整,首先要识别出高光区:再通过对高光区的色彩进行一定变换,使其达到提光或者暗化效果:最后也是最重要的,就是对高光区和非高光区的边缘作平滑处理. 下方介绍具体流程. 具体流程 1)读取识别图像的原图,并转灰度图,再归一化. // 生成灰度图 cv::Mat gray = cv::Mat::zeros(input.size(), CV_32FC1

  • C++ OpenCV实战之制作九宫格图像

    目录 前言 一.九宫格图像 二.源码 三.效果显示 总结 前言 本文将使用OpenCV C++ 制作九宫格图像.其实原理很简单,就是将一张图像均等分成九份.然后将这九个小块按一定间隔(九宫格效果)拷贝到新画布上就可以啦. 一.九宫格图像 原图如图所示.本案例的需求是希望将图像均等分成九份,制作九宫格图像.首先得将原图均等分成九份. 如图所示.将原图均等分成九份,然后将这每一个小方块按照一定的间隔(九宫格效果)拷贝到新图像就可以了.具体算法思想请看源码注释. 二.源码 #include<iostr

  • OpenCV制作Mask图像掩码的案例

    目录 一.掩膜(mask) 二.案例 1.效果图 2. 源码 一.掩膜(mask) 在有些图像处理的函数中有的参数里面会有mask参数,即此函数支持掩膜操作,首先何为掩膜以及有什么用,如下:数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形模板遮盖,继而下面的腐蚀或扩散将只影响选定的区域以外的区域.图像掩膜与其类似,用选定的图像.图形或物体,对处理

  • Python+Opencv实战之人脸追踪详解

    目录 前言 人脸追踪技术简介 使用基于 dlib DCF 的跟踪器进行人脸跟踪 使用基于 dlib DCF 的跟踪器进行对象跟踪 小结 前言 人脸处理是人工智能中的一个热门话题,人脸处理可以使用计算机视觉算法从人脸中自动提取大量信息,例如身份.意图和情感:而目标跟踪试图估计目标在整个视频序列中的轨迹,其中只有目标的初始位置是已知的,将这两者进行结合将产生许多有趣的应用.由于外观变化.遮挡.快速运动.运动模糊和比例变化等多种因素,人脸追踪非常具有挑战性. 人脸追踪技术简介 基于判别相关滤波器 (d

  • Python OpenCV实战之与机器学习的碰撞

    目录 0. 前言 1. 机器学习简介 1.1 监督学习 1.2 无监督学习 1.3 半监督学习 2. K均值 (K-Means) 聚类 2.1 K-Means 聚类示例 3. K最近邻 3.1 K最近邻示例 4. 支持向量机 4.1 支持向量机示例 小结 0. 前言 机器学习是人工智能的子集,它为计算机以及其它具有计算能力的系统提供自动预测或决策的能力,诸如虚拟助理.车牌识别系统.智能推荐系统等机器学习应用程序给我们的日常生活带来了便捷的体验.机器学习的蓬勃发展,得益于以下三个关键因素:1) 海

  • Python+OpenCV实战之利用 K-Means 聚类进行色彩量化

    目录 前言 利用 K-Means 聚类进行色彩量化 完整代码 显示色彩量化后的色彩分布 前言 K-Means 聚类算法的目标是将 n 个样本划分(聚类)为 K 个簇,在博文<OpenCV与机器学习的碰撞>中,我们已经学习利用 OpenCV 提供了 cv2.kmeans() 函数实现 K-Means 聚类算法,该算法通过找到簇的中心并将输入样本分组到簇周围,同时通过简单的示例了解了 K-Means 算法的用法.在本文中,我们将学习如何利用 K-Means 聚类进行色彩量化,以减少图像中颜色数量.

  • OpenCV实战之AI照片背景替换

    目录 导语 正文 1)附主程序 2)展示其他 总结 导语 不少人在生活中都有抠人像图换背景的需求.那怎么抠图呢? 相信不少人第一时间就想到了 PS 抠图大法,为了学会 PS 抠图很多人还花费不少精力,而且学会后大家想必都有共同感触:PS 抠图在制作抠图选区这个步骤太耗费时间!!就跟我减肥似的! 今天木木子就手把手教大家编写一款抠图人像技术—— 这款小程序实现一键智能抠取人像图的功能,非常强大! 比 PS 慢慢抠图效率可提升了太多了,而且还能让不会 PS 的群体也能轻松学会抠人像图. 吹了这么多,

  • OpenCV实战之基于Hu矩实现轮廓匹配

    目录 前言 一.查找轮廓 二.计算Hu矩 三.显示效果 四.源码 总结 前言 本文将使用OpenCV C++ 基于Hu矩进行轮廓匹配. 一.查找轮廓 原图 测试图 vector<vector<Point>>findContour(Mat Image) {     Mat gray;     cvtColor(Image, gray, COLOR_BGR2GRAY);     Mat thresh;     threshold(gray, thresh, 0, 255, THRESH

  • OpenCV实战之图像拼接的示例代码

    目录 背景 实现步骤 一.读取文件 二.单应性矩阵计算 三.图像拼接 总结 背景 图像拼接可以应用到手机中的全景拍摄,也就是将多张图片根据关联信息拼成一张图片: 实现步骤 1.读文件并缩放图片大小: 2.根据特征点和计算描述子,得到单应性矩阵: 3.根据单应性矩阵对图像进行变换,然后平移: 4.图像拼接并输出拼接后结果图: 一.读取文件 第一步实现读取两张图片并缩放到相同尺寸: 代码如下: img1 = cv2.imread('map1.png') img2 = cv2.imread('map2

随机推荐