opencv实现拼图算法

本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下

编程环境:VS2012+OpenCV2.4.6

功能:

第一种是将指定三幅图的指定位置的像素直接搬移到新的图像上

第二种是讲指定三幅图按照我们设定好的大小非等比缩放到第三幅图上

三张源图像

两种效果图

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main()
{
 ///读入图像/
 ///image1
 //cv::Mat image::zeros(768,1300);
 Mat image1;
 image1= cv::imread("1.jpg");
 if(!image1.data)
 {
  cout<<"image does not exist"<<endl;
 }
 namedWindow("Image1");//定义窗口
 imshow("Image1",image1);//显示图像
 ///image2
 Mat image2;
 image2= cv::imread("2.jpg");
 if(!image2.data)
 {
  cout<<"image does not exist"<<endl;
 }
 namedWindow("Image2");
 imshow("Image2", image2);
 //image3
 Mat image3;
 image3= cv::imread("3.jpg");
 if(!image3.data)
 {
  cout<<"image does not exist"<<endl;
 }
 cv::namedWindow("Image3");
 cv::imshow("Image3", image3);

 ///定义生成图像/
 cv::Mat combine = cv::Mat::zeros( 700, 1300,image1.type());
 //cout<<image.type()<<endl;   我擦那个哈士奇竟然是16
 // define ROI
 Mat imageROI1= combine(Rect(0,0,500,700));
 Mat imageROI2= combine(Rect(500,0,800,350));
 Mat imageROI3= combine(Rect(500,350,800,350));
 //DEBUG
 //std::cout<<combine.cols<<" "<<combine.rows<<endl; 

 //图像直接拷贝的方式~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~••
 image1(cv::Rect( 0, 0, 500, 700)).copyTo(imageROI1);
 image2(cv::Rect( 0, 0, 800, 350)).copyTo(imageROI2);
 image3(cv::Rect( 0, 0, 800, 350)).copyTo(imageROI3);

 //通过看到数值来验证是否是这个地方出错
 //std::cout<<combine(cv::Rect(0, 0, 3, 3))<<std::endl;

 //最终效果显示~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 namedWindow("Combined Image");
 imshow("Combined Image", combine);

 ///另外一种方式/
 /
 //那么我们使用另外一种方式,就是resize的方式来搞下这个东西,恩,让所有的图像都搞到这里面

 ///!!!建议用等比缩放然后获得出现的黑框

 resize(image1, imageROI1, imageROI1.size(),INTER_CUBIC);
 resize(image2, imageROI2, imageROI2.size(),INTER_CUBIC);
 resize(image3, imageROI3, imageROI3.size(),INTER_CUBIC);

 namedWindow("Combined Image++");
 imshow("Combined Image++", combine);

 waitKey(0);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Opencv开发实现拼图游戏

    本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下 一.代码 #include<opencv2/opencv.hpp> #include<iostream> #include<stdlib.h> #include<time.h> #define PL 800 #define PW 600 #define EAZY 50 using namespace std; using namespace cv; cons

  • OpenCV Python实现拼图小游戏

    基于OpenCV实现拼图版小游戏,供大家参考,具体内容如下 效果展示 实现 思路 1.对图像进行分割,分割成m*n个子图 2.打乱子图的顺序 3.将子图重新组成一幅新的图片并显示 4.添加鼠标点击响应动作,交换鼠标依次点击的两张图的位置 5.每次交换后,判断是否与原图是否一致 python代码 import cv2 as cv import numpy import random import math src = cv.imread("D:\\CvPic\\1.jpg") print

  • OpenCV实现拼图板小游戏

    80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也可以算得上是最早的"手游"了吧. 今天我们用OpenCV来复现一下儿时的经典! 代码: #include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/im

  • Opencv实现拼图板游戏

    80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也可以算得上是最早的"手游"了吧-- 简单的就是经典的,现在的Windows 7小工具里还保留了这个小游戏,当然你可能从来没有留意过~,就是下边的这个: 可以在控制面板->外观->桌面小工具里调出来. 这里准备用opencv里的模板匹配,通过鼠标响应事件来实现这个小游戏. 首先第

  • opencv实现拼图算法

    本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下 编程环境:VS2012+OpenCV2.4.6 功能: 第一种是将指定三幅图的指定位置的像素直接搬移到新的图像上 第二种是讲指定三幅图按照我们设定好的大小非等比缩放到第三幅图上 三张源图像 两种效果图 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv

  • python opencv之SURF算法示例

    本文介绍了python opencv之SURF算法示例,分享给大家,具体如下: 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要更快速的算法.在06年有人提出了SURF算法"加速稳定特征",从名字上来看,他是SIFT算法的加速版本. (原文) 在SIFT算法当中使用高斯差分方程(Difference of Gaussian)对高斯拉普拉斯方程( Laplacian of Gaussian)进行近似.然而,SURF使

  • python opencv之SIFT算法示例

    本文介绍了python opencv之SIFT算法示例,分享给大家,具体如下: 目标: 学习SIFT算法的概念 学习在图像中查找SIFT关键的和描述符 原理: (原理部分自己找了不少文章,内容中有不少自己理解和整理的东西,为了方便快速理解内容和能够快速理解原理,本文尽量不使用数学公式,仅仅使用文字来描述.本文中有很多引用别人文章的内容,仅供个人记录使用,若有错误,请指正出来,万分感谢) 之前的harris算法和Shi-Tomasi 算法,由于算法原理所致,具有旋转不变性,在目标图片发生旋转时依然

  • python opencv之分水岭算法示例

    本文介绍了python opencv之分水岭算法示例,分享给大家,具体如下: 目标 使用分水岭算法对基于标记的图像进行分割 使用函数cv2.watershed() 原理: 灰度图像可以被看成拓扑平面,灰度值高的区域可以看出山峰,灰度值低的区域可以看成是山谷.向每一个山谷当中灌不同颜色的水.水位升高,不同山谷的水会汇合,为防止不同山谷的水汇合,小在汇合处建立起堤坝.然后继续灌水,然后再建立堤坝,直到山峰都掩模.构建好的堤坝就是图像的分割. 此方法通常会得到过渡分割的结果,因为图像中的噪声以及其他因

  • OpenCV机器学习MeanShift算法笔记分享

    MeanShift算法 Mean shift 是一种机器学习算法,并不仅仅局限于图像上的应用.关于 Mean shift 算法介绍的书和文章很多,这里就不多介绍了.简单的说,Meanshift 算法是一种迭代算法,需要给一个初始的区域,然后这个算法会反复的调整这个区域,使得这个区域最吻合我们期望的特征. OpenCV 中有两处用到了 Mean Shift .分别是: pyrMeanShiftFiltering meanShift 这里只介绍第二个函数的使用方法. 我们的原始图像还是上次那个向日葵

  • openCV中meanshift算法查找目标的实现

    目录 一.简介 二.实现过程 1.设定感兴趣的区域 2.获取脸部直方图并做归一化 3.反向投影,用meanshift查找目标 三.其他实验结果 四.部分原理补充 五.完整代码 一.简介 图像直方图的反向投影是一个概率分布图,表示一个指定图像片段出现在特定位置的概率.当我们已知图像中某个物体的大体位置时,可以通过概率分布图找到物体在另一张图像中的准确位置.我们可以设定一个初始位置,在其周围反复移动来提高局部匹配概率,从而找到物体的准确位置,这个实现过程叫做均值平移算法. 二.实现过程 因为人物的面

  • Java OpenCV利用KNN算法实现图像背景移除

    目录 实现步骤 示例代码 结果图 实现步骤 1 获取视频 2 设置形态学结构 3 创建 Video.createBackgroundSubtractorKNN() 4 提取模型 BS 5 进行形态学变换 6 膨胀 7 二值化 8 展示结果 示例代码 package com.xu.opencv; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional

  • opencv canny边缘检测算法详解

    目录 一.边缘检测原理 二.canny算法原理 三.opencv函数支持Canny() 四.代码示例: 一.边缘检测原理 图像的边缘由图像中两个相邻的区域之间的像素集合组成,是指图像中一个区域的结束和另外一个区域的开始.也可以这么理解,图像边缘就是图像中灰度值发生空间突变的像素的集合.梯度方向和幅度是图像边缘的两个性质,沿着跟边缘垂直的的方向,像素值的变化幅度比较平缓:而沿着与边缘平行的方向,则像素值变化幅度变化比较大.于是,根据该变化特性,通常会采用计算一阶或者二阶导数的方法来描述和检测图像边

  • C++ opencv利用grabCut算法实现抠图示例

    目录 前言 一.grabCut函数 二.compare函数 三.代码 前言 grabCut算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只用少量的用户交互操作,即可得到比较好的分割结果,和分水岭顺丰比较相似,但是计算速度比较慢,得到的结果比较精确 用法:输入一幅图片并对一些像素做属于背景或属于前景的标记,算法会根据这个局部标记计算出整个图像中前景和背景的分割线. 一.grabCut函数 void grabCut(InputArray img, InputOutputArray mask,

  • C++结合OpenCV实现RRT算法(路径规划算法)

    目录 1.RRT算法简介 2.算法整体框架流程 2.1 rand点的建立 2.2 near和new点的建立 2.3 安全性检查 2.4 算法结束判断 3.RRT代码框架 3.1 主函数 3.2 地图数据的获取 3.3 RRT算法的实现 3.3.1 起点入树 3.3.2 rand点的获取 3.3.3 near点的获取 3.3.4 new点的获取 3.3.5 安全性检测 3.4 可视化显示 4. 代码运行过程 1.RRT算法简介 代码链接:RRT动图展示 RRT 2.算法整体框架流程 RRT算法整体

随机推荐