前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:点击跳转

目录

一,准备图片

二,拼图

三,优化思路


一,准备图片

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

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

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

opencv应用——以图拼图相关推荐

  1. python拼图游戏代码,OpenCV Python实现拼图小游戏

    基于OpenCV实现拼图版小游戏,供大家参考,具体内容如下 效果展示 实现 思路 1.对图像进行分割,分割成m*n个子图 2.打乱子图的顺序 3.将子图重新组成一幅新的图片并显示 4.添加鼠标点击响应 ...

  2. scrapy爬虫初探

    今天先从实操作来讲述采用scrapy来实现对csdn博客的爬取,后续慢慢剖析scrapy爬虫的原理和结构. 1)环境搭建 首先安装scrapy pip install scrapy 其他库依据需要自动 ...

  3. 抖音自动人机拼图验证-selenium+pyautogui+opencv

    一.简介 平时使用Selenium爬取网页数据的时候难免会遇到人机验证,有拼图.文字.滑动等 本文介绍比较常见的一种滑块拼图验证,利用opencv就可计算出滑块需要移动的距离 虽然Selenium有自 ...

  4. 【opencv有趣应用】图像拼图

    今天学习图像拼图,就有点像拼图游戏那样的 import cv2 import osdef cv_show_image(name, img):cv2.imshow(name, img)cv2.waitK ...

  5. opencv以图片名称为索引顺序读取多张图片

    自己的项目中需要按照顺序读取多张图片,论坛上已有的方式大多是通过图像名称固定编号,按照编号循序读取,这种方法虽然简单有效,可局限性在于读取的图片名必须是连续有限的,比如下面的例子中只能读取该文件夹下图 ...

  6. 六寸相纸打印拼图 - opencv

    准备自己打印一些照片,三寸相纸性价比低,只好买六寸来拼四张然后裁剪,不过并没有搜到提供了这个功能的工具,想想代码应该很简单,所以就造轮子了.可能其实有但是我没搜到. 轮子在这里: https://gi ...

  7. 十.OpenCv 特征点检测和匹配

    特征点检测和匹配 1. 特征检测的基本概念 特征检测是计算机视觉和图像处理中的一个概念.它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征.特征检测的结果是把图像上的点分为不同的子集 ...

  8. 【OpenCV学习】(十)特征点检测与匹配

    [OpenCV学习](十)特征点检测与匹配 背景 提取图像的特征点是图像领域中的关键任务,不管在传统还是在深度学习的领域中,特征代表着图像的信息,对于分类.检测任务都是至关重要的: 特征点应用的一些场 ...

  9. 如何用 OpenCV、Python 和深度学习实现面部识别?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 Face ID 的兴起带动了一波面部识别技术热 ...

最新文章

  1. Error Based Pruning剪枝算法、代码实现与举例
  2. django和mysql如何建模_Django如何设计数据模型
  3. XXX管理平台系统——项目总结(over)
  4. 一名优秀的前端大牛《司徒正美》
  5. Python 智能银行卡识别系统的实现 (2)—系统的实现
  6. linux下通过V4L2驱动USB摄像头
  7. mysql基于PHP下的大学生校园交流论坛的设计与实现 毕业设计源码101634
  8. 使用SpriteAtlas打包图集并显示
  9. Java开发中OnlyOffice、OpenOffice和LibreOffice怎么选?
  10. 英伟达GPU产品分类说明
  11. RuntimeError: cannot release un-acquired lock
  12. 浅谈垃圾渗滤液处理设计要点
  13. 电脑公司GHOSTXP_SP3快速装机版V2013.1
  14. linux软件实现看门狗,一个软件实现的Linux看门狗—soft_wdt
  15. 苹果备忘录显示无法连接服务器失败,备忘录帮助
  16. 微信小程序跨域问题 post 403 Invalid CORS request 后台
  17. java基于ssm的幼儿园管理系统
  18. DHCP执行流程详解
  19. java常用类-StringBuffer,StringBuilder
  20. war3 魔兽争霸悬崖地形算法

热门文章

  1. 利用Verilog计算IQ信号相位的一种方法
  2. F1,RECALL,TPR,FNR等指标计算
  3. Mathematica 13.0.1 Linux版安装教程
  4. Android特效专辑(一)——水波纹过渡特效(首页)
  5. Android面试老生常谈的 View 事件分发机制,看这一篇就够了
  6. 全栈工程师是那些为了节约成本的小公司在招聘吗?
  7. windows下映射网络驱动器
  8. 炫龙 shinelon笔记本电脑-毁灭者DD2如何U盘启动?
  9. 三类器械计算机信息管理系统,三类医疗器械计算机管理系统要求
  10. 2021林伟华中学高考成绩查询,2021年汕尾高考状元名单公布,汕尾高考状元学校资料及最高分...