IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> opencv应用——以图拼图 -> 正文阅读

[人工智能]opencv应用——以图拼图

一,准备图片

可以先手动分一分,有的是关键信息在中间,有的是在上面,主要就是这两种。

然后用程序先截出正方形的图片:

int main()
{
	for (int i = 1; i <= 10; i++) {
		Mat img = imread("D:/pic2/img (" + to_string(i) + ").jpg",0);
		int p = min(img.rows, img.cols);
		Mat img2 = img(Rect((img.cols - p) / 2, (img.rows - p) / 2, p, p));
		imwrite("D:/pic2/a" + to_string(i) + ".jpg",img2);
	}
	return 0;
}

截上面的:

int main()
{
	for (int i = 1; i <= 15; i++) {
		Mat img = imread("D:/pic2/img (" + to_string(i) + ").jpg",0);
		int p = min(img.rows, img.cols);
		Mat img2 = img(Rect(0, 0, p, p));
		imwrite("D:/pic2/a" + to_string(i) + ".jpg",img2);
	}
	return 0;
}

二,拼图

我们先把所有小图调整到统一的大小,然后按照亮度排序。

对于目标图像,按照分块,也分别统计亮度排序。

再根据排序结果进行匹配,把小图往对应位置填充就行了。

图片除了要做亮度匹配之外,在最后拼到大图上之前,还要做亮度调整,把整体亮度调到和分块亮度相同。

struct Nodes
{
	int t;
	int id;
	bool operator<(Nodes a) const
	{
		if (t == a.t)return id < a.id;
		return t < a.t;
	}
};

int imageSum(Mat img)
{
	int s = 0;
	for (int i = 0; i < img.rows; i++)for (int j = 0; j < img.cols; j++)
		s += img.at<uchar>(i, j);
	return s;
}

int main()
{
	const int N = 9;
	const int NUM = N * N;
	const int SIZE = N * 2000;
	const int PIX = 100;
	const int R1 = SIZE / PIX;
	const int R = R1 / N * R1 / N;
	Mat imgs[NUM];
	for (int i = 1; i <= NUM; i++) {
		imgs[i - 1] = imread("D:/pic2/img (" + to_string(i) + ").jpg", 0);
		resize(imgs[i - 1], imgs[i - 1], Size(PIX, PIX));
	}
	Mat img = imread("D:/pic2/img (74).jpg", 0);
	resize(img, img, Size(SIZE, SIZE));
	Nodes node[NUM * R];
	Nodes node2[NUM * R];
	for (int i = 0; i < NUM * R; i++) {
		node[i].t = imageSum(imgs[i % NUM]);
		node[i].id = i % NUM;
		node2[i].t = imageSum(img(Rect(i % R1 * PIX, i / R1 * PIX, PIX, PIX)));
		node2[i].id = i;
	}
	sort(node, node + NUM * R);
	sort(node2, node2 + NUM * R);
	for (int i = 0; i < NUM * R; i++)
	{
		Mat image;
		imgs[node[i].id % NUM].copyTo(image);
		image *= 1.0 * node2[i].t / node[i].t;
		image.copyTo(img(Rect(node2[i].id % R1 * PIX, node2[i].id / R1 * PIX, PIX, PIX)));
	}
	//imshow("img", img);
	imwrite("D:/pic2/ans.png", img);
	cv::waitKey(0);
	return 0;
}

?拼接结果:

(头部)放大效果:

?(眼睛)放大效果:

?

三,优化思路

1,当前所用图片较少,如果图片多一点,效果会好一点。

2,因为图片少,每个图片都被用到多次。当前是每个图片被使用的次数相同,这一点可以优化一下,自适应的选择每个图片被使用的次数,效果应该会更好。

3,要想搞成彩色的,主要问题在于图片的匹配问题。灰度图像只需要按照亮度排序即可匹配,改成彩色图像相当于从一维变成三维。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:26:47  更:2022-04-24 09:27:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:40:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码