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,要想搞成彩色的,主要问题在于图片的匹配问题。灰度图像只需要按照亮度排序即可匹配,改成彩色图像相当于从一维变成三维。
opencv应用——以图拼图相关推荐
- python拼图游戏代码,OpenCV Python实现拼图小游戏
基于OpenCV实现拼图版小游戏,供大家参考,具体内容如下 效果展示 实现 思路 1.对图像进行分割,分割成m*n个子图 2.打乱子图的顺序 3.将子图重新组成一幅新的图片并显示 4.添加鼠标点击响应 ...
- scrapy爬虫初探
今天先从实操作来讲述采用scrapy来实现对csdn博客的爬取,后续慢慢剖析scrapy爬虫的原理和结构. 1)环境搭建 首先安装scrapy pip install scrapy 其他库依据需要自动 ...
- 抖音自动人机拼图验证-selenium+pyautogui+opencv
一.简介 平时使用Selenium爬取网页数据的时候难免会遇到人机验证,有拼图.文字.滑动等 本文介绍比较常见的一种滑块拼图验证,利用opencv就可计算出滑块需要移动的距离 虽然Selenium有自 ...
- 【opencv有趣应用】图像拼图
今天学习图像拼图,就有点像拼图游戏那样的 import cv2 import osdef cv_show_image(name, img):cv2.imshow(name, img)cv2.waitK ...
- opencv以图片名称为索引顺序读取多张图片
自己的项目中需要按照顺序读取多张图片,论坛上已有的方式大多是通过图像名称固定编号,按照编号循序读取,这种方法虽然简单有效,可局限性在于读取的图片名必须是连续有限的,比如下面的例子中只能读取该文件夹下图 ...
- 六寸相纸打印拼图 - opencv
准备自己打印一些照片,三寸相纸性价比低,只好买六寸来拼四张然后裁剪,不过并没有搜到提供了这个功能的工具,想想代码应该很简单,所以就造轮子了.可能其实有但是我没搜到. 轮子在这里: https://gi ...
- 十.OpenCv 特征点检测和匹配
特征点检测和匹配 1. 特征检测的基本概念 特征检测是计算机视觉和图像处理中的一个概念.它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征.特征检测的结果是把图像上的点分为不同的子集 ...
- 【OpenCV学习】(十)特征点检测与匹配
[OpenCV学习](十)特征点检测与匹配 背景 提取图像的特征点是图像领域中的关键任务,不管在传统还是在深度学习的领域中,特征代表着图像的信息,对于分类.检测任务都是至关重要的: 特征点应用的一些场 ...
- 如何用 OpenCV、Python 和深度学习实现面部识别?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 Face ID 的兴起带动了一波面部识别技术热 ...
最新文章
- Error Based Pruning剪枝算法、代码实现与举例
- django和mysql如何建模_Django如何设计数据模型
- XXX管理平台系统——项目总结(over)
- 一名优秀的前端大牛《司徒正美》
- Python 智能银行卡识别系统的实现 (2)—系统的实现
- linux下通过V4L2驱动USB摄像头
- mysql基于PHP下的大学生校园交流论坛的设计与实现 毕业设计源码101634
- 使用SpriteAtlas打包图集并显示
- Java开发中OnlyOffice、OpenOffice和LibreOffice怎么选?
- 英伟达GPU产品分类说明
- RuntimeError: cannot release un-acquired lock
- 浅谈垃圾渗滤液处理设计要点
- 电脑公司GHOSTXP_SP3快速装机版V2013.1
- linux软件实现看门狗,一个软件实现的Linux看门狗—soft_wdt
- 苹果备忘录显示无法连接服务器失败,备忘录帮助
- 微信小程序跨域问题 post 403 Invalid CORS request 后台
- java基于ssm的幼儿园管理系统
- DHCP执行流程详解
- java常用类-StringBuffer,StringBuilder
- war3 魔兽争霸悬崖地形算法
热门文章
- 利用Verilog计算IQ信号相位的一种方法
- F1,RECALL,TPR,FNR等指标计算
- Mathematica 13.0.1 Linux版安装教程
- Android特效专辑(一)——水波纹过渡特效(首页)
- Android面试老生常谈的 View 事件分发机制,看这一篇就够了
- 全栈工程师是那些为了节约成本的小公司在招聘吗?
- windows下映射网络驱动器
- 炫龙 shinelon笔记本电脑-毁灭者DD2如何U盘启动?
- 三类器械计算机信息管理系统,三类医疗器械计算机管理系统要求
- 2021林伟华中学高考成绩查询,2021年汕尾高考状元名单公布,汕尾高考状元学校资料及最高分...