#define EIGEN_USE_MKL_ALL
#define EIGEN_VECTORIZE_SSE4_2
#include <iostream>
#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp" #include <Eigen/Sparse>
#include <time.h>
using namespace std;
using namespace cv;
using namespace Eigen; int main()
{
int t = time(NULL);
const string File = "5.jpg";
Mat imageSource = imread(File, 0);
for (unsigned int i = 0; i < imageSource.rows; i++)
for (unsigned j = 0; j < imageSource.cols; j++)
if (imageSource.at<uchar>(i, j) != 0)imageSource.at<uchar>(i, j) = 255;
namedWindow("Source Image");
imshow("Source Image", imageSource); Mat image;
GaussianBlur(imageSource, image, Size(15, 15), 0);
Canny(image, image, 100, 250);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(image, contours, hierarchy, RETR_LIST, CHAIN_APPROX_NONE, Point());
Mat imageContours = Mat::zeros(image.size(), CV_8UC1);
Mat Contours = Mat::zeros(image.size(), CV_8UC1); //绘制
//contours[i]代表的是第i个轮廓,contours[i].size()代表的是第i个轮廓上所有的像素点数
int cont_area_M = 0;
for (int i = 0; i < contours.size(); i++) {
if (contourArea(contours[i]) > cont_area_M)
cont_area_M = contourArea(contours[i]);
for (int j = 0; j < contours[i].size(); j++)
{
//绘制出contours向量内所有的像素点
Point P = Point(contours[i][j].x, contours[i][j].y);
Contours.at<uchar>(P) = 255; }
}
//绘制轮廓 auto itc = contours.begin(); while (itc != contours.end())
{
if (contourArea(*itc) < cont_area_M - 1)
itc = contours.erase(itc);
else
++itc; } drawContours(imageContours, contours, 0, Scalar(255), 1, 8, hierarchy, 0); Rect rect = boundingRect(contours[0]); Mat ima = imread("55.jpg", 1);
Mat ima1 = imread("555.jpg", 1); Point p0(50, 215);
Point p1(0, 0); int n = 0; SparseMatrix< double, ColMajor> src1((rect.height + 2)*(rect.width + 2), (rect.height + 2)*(rect.width + 2));
VectorXd src20((rect.height + 2)*(rect.width + 2));
VectorXd src21((rect.height + 2)*(rect.width + 2));
VectorXd src22((rect.height + 2)*(rect.width + 2)); for (int i = rect.y - 1; i < rect.height + rect.y + 1; i++)
for (int j = rect.x - 1; j < rect.width + rect.x + 1; j++)
{
p1.x = j; p1.y = i;
if (pointPolygonTest(contours[0], p1, false) >= 0)
{
src1.insert(n, n) = 4;
src1.insert(n, n - 1) = -1;
src1.insert(n, n + 1) = -1;
src1.insert(n, n - rect.width - 2) = -1;
src1.insert(n, n + rect.width + 2) = -1;
src20(n) = 4*ima.at<Vec3b>(p1)[0]- ima.at<Vec3b>(p1+Point(0,1))[0] - ima.at<Vec3b>(p1+Point(1, 0))[0] - ima.at<Vec3b>(p1-Point(0,1))[0]- ima.at<Vec3b>(p1 - Point(1, 0))[0];
src21(n) = 4 * ima.at<Vec3b>(p1)[1] - ima.at<Vec3b>(p1 + Point(0, 1))[1] - ima.at<Vec3b>(p1 + Point(1, 0))[1] - ima.at<Vec3b>(p1 - Point(0, 1))[1] - ima.at<Vec3b>(p1 - Point(1, 0))[1];
src22(n) = 4 * ima.at<Vec3b>(p1)[2] - ima.at<Vec3b>(p1 + Point(0, 1))[2] - ima.at<Vec3b>(p1 + Point(1, 0))[2] - ima.at<Vec3b>(p1 - Point(0, 1))[2] - ima.at<Vec3b>(p1 - Point(1, 0))[2];
}
else {
src1.insert(n, n) = 1;
src20(n) = ima1.at<Vec3b>(p1+p0)[0];
src21(n) = ima1.at<Vec3b>(p1 + p0)[1];
src22(n) = ima1.at<Vec3b>(p1 + p0)[2]; };
++n;
}
// cout << src1; VectorXd dst00; VectorXd dst01; VectorXd dst02;
SparseLU <SparseMatrix <double>, COLAMDOrdering< int >> solver;
src1.makeCompressed();
solver.compute(src1);
// solver.analyzePattern(src1);
// solver.factorize(src1);
dst00 = solver.solve(src20);
dst01 = solver.solve(src21);
dst02 = solver.solve(src22); n = 0; for (int i = rect.y - 1; i < rect.height + rect.y + 1; i++)
for (int j = rect.x - 1; j < rect.width + rect.x + 1; j++) {
p1.x = j; p1.y = i;
if (pointPolygonTest(contours[0], p1, false) > 0) {
ima1.at<Vec3b>(i + p0.y, j + p0.x)[0] = dst00(n) < 0?0: dst00(n);
ima1.at<Vec3b>(i + p0.y, j + p0.x)[1] = dst01(n)< 0 ? 0 : dst01(n);
ima1.at<Vec3b>(i + p0.y, j + p0.x)[2] = dst02(n)< 0 ? 0 : dst02(n);
} n++;
} imshow("Contours Image", imageContours); //轮廓
imshow("Point of Contours", Contours); //向量contours内保存的所有轮廓点集
imshow("Poin", ima1);
cout<<(time(NULL) -t );
waitKey(0); system("pause");
return 0;
}

  5.jpg

  55.jpg

  555.jpg

  生成的图片

vs2015+opencv3.3.1 +Eigen 3.3.4 c++ 实现 泊松图像编辑(无缝融合)的更多相关文章

  1. vs2015+opencv3.3.1 +Eigen 3.3.4 c++实现 薄膜插值 泊松图像编辑(v=0||Δf=0)

    #include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/i ...

  2. win7下VS2015+opencv3.1.0配置

    由于opencv与vs的适配版本不同,本人在官网下载opencv3.1.0,其可以和VS2013.VS2015适配,文中以VS2015为例 opencv2.4.13-----vc11;vc12 ope ...

  3. [转]VS2015+OpenCV3.3 GPU模块和opencv_contrib模块的编译以及采用CMake编译opencv_contrib时提示“No extra modules found in folder”问题的解决方案

    据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边.但是这里边有很多我们经常要用的算法 ...

  4. Win10 64位+VS2015+Opencv3.3.0安装配置

    Win10 64位+VS2015+Opencv3.3.0安装配置 1.我们首先下载VS2015.OpenCV3.3.0. 1.1 VS2015下载 在官网https://visualstudio.mi ...

  5. win10+VS2015+opencv3.4.0配置方法

    win10+VS2015+opencv3.4.0配置方法 操作环境: windows10 64位opencv 3.4.0:https://opencv.org/releases.html(选择open ...

  6. win10+vs2015+opencv3.0 x86/x64配置(debug+release)

    最近做一些图像识别的项目,用到了opencv,opencv3.1没有x86版本,所以只能用opencv3.0来完成,下面介绍一下在window10下vs2015 配置opencv3.0的过程(x86和 ...

  7. opencv配置(win10+VS2015+opencv3.1)

    Step 1:准备工作 a.win10 b.vs2015 c.opencv3.1[从http://opencv.org/downloads.html下载] Step 2.开始安装 a. 双击openc ...

  8. opencv探索之路(一):win10 X64+VS2015+opencv3.10安装教程

    我的电脑64位Win10系统,现在利用VS2015安装opencv3.10.安装之路颇为艰辛,从一开始的VS2015的安装,到opencv的安装,都充满挑战,历经千辛万苦终于把opencv开发环境搭建 ...

  9. win10*64+vs2015+opencv3.0工程模板配置

    参考网上的资料,自己再次整合一下,为新手提供个方便,也为自己备份. 一.下载安装opencv3.0 1.首先下载opencv3.0的包(windows版本的) 2.安装opencv,路径自己选好,自动 ...

随机推荐

  1. 基于Nfs和Samba的Lamp环境实现

    一 系统环境二 网络文件系统与web环境的结合三 搭建lamp环境四 实现nfs服务五 实现samba服务六 实现效果 一 系统环境 系统平台:CentOS release 6.8 (Final) L ...

  2. 静态实现AOP(翻译自MSDN)

    在.net实现AOP 本文通过一个简单的例子实现静态AOP.改例子主要实现客户的增删改查,突然有一天你的老板需要在程序上跟踪每个方法操作的运行日志. 主要分为5个步骤. 第一步:创建接口IReposi ...

  3. Py修行路 python基础 (二十四)socket编程

    socket编程 一.客户端/服务端架构 客户端/服务端架构 即C/S架构,包括:1.硬件C/S架构,2.软件C/S架构. 互联网中处处都是C/S架构,学习socket 就是为了完成C/S架构的开发. ...

  4. Bash读取/etc/passwd的特殊技巧

    在twitter上看到的,记录一下: 可以bypass基于正则的规则,这里还可以引申出其他的bypass方法,

  5. Python3 持久化pickle模块

    pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 1.pickle.dump(obj, file[, protocol]) 序列化对象,并将结果数据流写入到文件对象中.参数 ...

  6. apache 不解析 php

    apache 不解析php 1.找到: AddType application/x-gzip .gz .tgz在其下面添加: AddType application/x-httpd-php .php ...

  7. [原创]Spring boot 框架构建jsp web应用

    说明 Spring boot支持将web项目打包成一个可执行的jar包,内嵌tomcat服务器,独立部署 为支持jsp,则必须将项目打包为war包 pom.xml中设置打包方式 <packagi ...

  8. PHP PDO SQLSERVER

    $bbs = new PDO("odbc:MSSQLServer",   $username_bbs,    $password_bbs $bbs = new PDO('); $s ...

  9. xcode中的预定义宏

    [xcode中的预定义宏] 1.SRCROOT,是定义本target的proj的路径. 2.OBJROOT,对象文件根路径,对象文件(即obj文件)就是中间的临时文件.中间文件输出目录的名字以“pro ...

  10. XP下,移动窗口产生重影的问题

    最近做了一个东西,其中有一个小窗口需要跟着主窗口一起移动,结果发现在Xp系统上总是产生重影,需要刷新桌面才能消失. 移动窗口我使用的是MoveWindow,最后一个参数bRepaint传递的是FALS ...