图片找茬游戏

您所在的位置:网站首页 看图找不同第10关图片 图片找茬游戏

图片找茬游戏

2024-07-16 21:59:42| 来源: 网络整理| 查看: 265

前言 有个小游戏,就是给出两张只有轻微的几处差异的图像,让大家来找出图像中的不同之处,之前曾经玩过,发现游戏明明告诉你有几处不同,但你什么也找不全,比如下面的几组图像,这几组图像每组都有三个不同的地方,可以试试能找出几处。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 不管你再什么认真找,也不容易找全其中差异的地方。以前试过从左到一块块的用眼睛扫描,但也是很容易漏掉细微的地方。可能是人的视觉感受野的问题吧。

2.在数字图像处理里面,每张图像都被看成一个三维的矩阵,那么把两张图像矩阵一相减,就得到差异的地方,在OpenCV库里面有封装的函数subtract()可以实现为个功能。这个API也可用来做差分法运动跟踪。 3.我这里的编程环境是Windows 10 64位,IDE是VS2019,配置了OpenCV 4.5,实现语言是C++。

二.代码实现

1.创建新的工程,把编译好的OpenCV导入到Vs里,添加系统环境。 2.实现代码

#include #include #include void imshow(std::string name, const cv::Mat& cv_src) { cv::namedWindow(name, 0); int max_rows = 800; int max_cols = 800; if (cv_src.rows >= cv_src.cols && cv_src.rows > max_rows) { cv::resizeWindow(name, cv::Size(cv_src.cols * max_rows / cv_src.rows, max_rows)); } else if (cv_src.cols >= cv_src.rows && cv_src.cols > max_cols) { cv::resizeWindow(name, cv::Size(max_cols, cv_src.rows * max_cols / cv_src.cols)); } cv::imshow(name, cv_src); } void imageSubtract(const cv::Mat& image1, const cv::Mat& image2,cv::Mat &cv_dst) { if (image1.empty() || image2.empty()) { return; } cv::Mat cv_src1 = image1.clone(); cv::Mat cv_src2 = image2.clone(); if ((image1.rows != image2.rows) || (image1.cols != image2.cols)) { int rows = (image1.rows + image2.rows) / 2; int cols = (image1.cols + image2.cols) / 2; cv::resize(image1, cv_src1, cv::Size(cols, rows)); cv::resize(image2, cv_src2, cv::Size(cols, rows)); } cv::Mat image1_gary, image2_gary; if (cv_src1.channels() != 1) { cvtColor(cv_src1, image1_gary, cv::COLOR_BGR2GRAY); } if (cv_src2.channels() != 1) { cvtColor(cv_src2, image2_gary, cv::COLOR_BGR2GRAY); } cv::Mat frameDifference, absFrameDifferece; cv::Mat previousGrayFrame = image2_gary.clone(); //图1减图2 subtract(image1_gary, image2_gary, frameDifference, cv::Mat(), CV_16SC1); //取绝对值 absFrameDifferece = abs(frameDifference); //位深的改变 absFrameDifferece.convertTo(absFrameDifferece, CV_8UC1, 1, 0); imshow("absFrameDifferece", absFrameDifferece); cv::Mat segmentation; //阈值处理(这一步很关键,要调好二值化的值) threshold(absFrameDifferece, segmentation, 10, 255, cv::THRESH_BINARY); //threshold(absFrameDifferece, segmentation, 0, 255, cv::THRESH_OTSU); imshow("bin", segmentation); //形态学处理(开闭运算) //形态学处理用到的算子 cv::Mat morphologyKernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5), cv::Point(-1, -1)); morphologyEx(segmentation, segmentation, cv::MORPH_CLOSE, morphologyKernel, cv::Point(-1, -1), 2, cv::BORDER_REPLICATE); //找边界 std::vector contours; std::vector hierarchy; findContours(segmentation, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE, cv::Point(0, 0));//CV_RETR_TREE std::vector contours_poly(contours.size()); std::vector boundRect; cv_dst = cv_src1.clone(); for (int index = 0; index //读入图像 cv::Mat cv_image1 = cv::imread("images/F1.jpg"); cv::Mat cv_image2 = cv::imread("images/F2.jpg"); cv::Mat cv_dst; //比较图像 imageSubtract(cv_image1, cv_image2, cv_dst); imshow("A1", cv_image1); imshow("A2", cv_image2); imshow("dst", cv_dst); cv::imwrite("cv_dst.jpg", cv_dst); cv::waitKey(); return 0; }

3.运行效果: 在这里插入图片描述

3.结果对比: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 4.整个工程源码以上传到CSDN:https://download.csdn.net/download/matt45m/49898214

学习交流可加企鹅群:767133823



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭