当前位置: 首页 > news >正文

如何用ps做网站效果图营销的方法和技巧

如何用ps做网站效果图,营销的方法和技巧,电子商务平台开发建设,乐清企业网站建站一、介绍 图像拼接. 二、分步实现 要实现图像拼接,简单来说有以下几步: 对每幅图进行特征点提取对对特征点进行匹配进行图像配准把图像拷贝到另一幅图像的特定位置对重叠边界进行特殊处理 PS:需要使用低版本的opencv,否则无法使…

一、介绍

     图像拼接.

二、分步实现

     要实现图像拼接,简单来说有以下几步:

  1. 对每幅图进行特征点提取
  2. 对对特征点进行匹配
  3. 进行图像配准
  4. 把图像拷贝到另一幅图像的特定位置
  5. 对重叠边界进行特殊处理

     PS:需要使用低版本的opencv,否则无法使用特征角点提取算子。

#include "highgui/highgui.hpp"    
#include "opencv2/nonfree/nonfree.hpp"    
#include "opencv2/legacy/legacy.hpp"   
#include <iostream>  using namespace cv;
using namespace std;typedef struct
{Point2f left_top;Point2f left_bottom;Point2f right_top;Point2f right_bottom;
}four_corners_t;four_corners_t corners;void CalcCorners(const Mat& H, const Mat& src)
{// 左上角(0, 0, 1)double v2[3] = { 0, 0, 1 };double v1[3] = { 0 };Mat V2 = Mat(3, 1, CV_64FC1, v2);Mat V1 = Mat(3, 1, CV_64FC1, v1);V1 = H * V2;corners.left_top.x = v1[0] / v1[2];corners.left_top.y = v1[1] / v1[2];// 左下角(0, src.rows, 1)v2[0] = 0;v2[1] = src.rows;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2);V1 = Mat(3, 1, CV_64FC1, v1);V1 = H * V2;corners.left_bottom.x = v1[0] / v1[2];corners.left_bottom.y = v1[1] / v1[2];// 右上角(src.cols, 0, 1)v2[0] = src.cols;v2[1] = 0;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2);V1 = Mat(3, 1, CV_64FC1, v1);V1 = H * V2;corners.right_top.x = v1[0] / v1[2];corners.right_top.y = v1[1] / v1[2];// 右下角(src.cols, src.rows, 1)v2[0] = src.cols;v2[1] = src.rows;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2);V1 = Mat(3, 1, CV_64FC1, v1);V1 = H * V2;corners.right_bottom.x = v1[0] / v1[2];corners.right_bottom.y = v1[1] / v1[2];
}void OptimizeSeam(Mat& img1, Mat& trans, Mat& dst)
{int start = MIN(corners.left_top.x, corners.left_bottom.x);//开始位置,即重叠区域的左边界  double processWidth = img1.cols - start; // 重叠区域的宽度  int rows = dst.rows;int cols = img1.cols; // 注意,是列数*通道数double alpha = 1; // img1中像素的权重  for (int i = 0; i < rows; i++){uchar* p = img1.ptr<uchar>(i);  // 获取第i行的首地址uchar* t = trans.ptr<uchar>(i);uchar* d = dst.ptr<uchar>(i);for (int j = start; j < cols; j++){// 如果遇到图像trans中无像素的黑点,则完全拷贝img1中的数据if (t[j * 3] == 0 && t[j * 3 + 1] == 0 && t[j * 3 + 2] == 0){alpha = 1;}else{// img1中像素的权重,与当前处理点距重叠区域左边界的距离成正比,实验证明,这种方法确实好  alpha = (processWidth - (j - start)) / processWidth;}d[j * 3] = p[j * 3] * alpha + t[j * 3] * (1 - alpha);d[j * 3 + 1] = p[j * 3 + 1] * alpha + t[j * 3 + 1] * (1 - alpha);d[j * 3 + 2] = p[j * 3 + 2] * alpha + t[j * 3 + 2] * (1 - alpha);}}
}int main(int argc, char* argv[])
{Mat image01 = imread("image2.png", 1); //右图Mat image02 = imread("image1.png", 1); //左图imshow("p2", image01);imshow("p1", image02);// 灰度图转换  Mat image1, image2;cvtColor(image01, image1, CV_RGB2GRAY);cvtColor(image02, image2, CV_RGB2GRAY);// 提取特征点SurfFeatureDetector Detector(2000);vector<KeyPoint> keyPoint1, keyPoint2;Detector.detect(image1, keyPoint1);Detector.detect(image2, keyPoint2);// 特征点描述SurfDescriptorExtractor Descriptor;Mat imageDesc1, imageDesc2;Descriptor.compute(image1, keyPoint1, imageDesc1);Descriptor.compute(image2, keyPoint2, imageDesc2);FlannBasedMatcher matcher;vector<vector<DMatch> > matchePoints;vector<Mat> train_desc(1, imageDesc1);matcher.add(train_desc);matcher.train();matcher.knnMatch(imageDesc2, matchePoints, 2);cout << "total match points: " << matchePoints.size() << endl;// Lowe's algorithm,获取优秀匹配点vector<DMatch> GoodMatchePoints;for (int i = 0; i < matchePoints.size(); i++){if (matchePoints[i][0].distance < 0.4 * matchePoints[i][1].distance){GoodMatchePoints.push_back(matchePoints[i][0]);}}// draw matchMat first_match;drawMatches(image02, keyPoint2, image01, keyPoint1, GoodMatchePoints, first_match);imshow("first_match ", first_match);vector<Point2f> imagePoints1, imagePoints2;for (int i = 0; i < GoodMatchePoints.size(); i++){imagePoints2.push_back(keyPoint2[GoodMatchePoints[i].queryIdx].pt);imagePoints1.push_back(keyPoint1[GoodMatchePoints[i].trainIdx].pt);}// 获取图像1到图像2的投影映射矩阵 尺寸为3*3  Mat homo = findHomography(imagePoints1, imagePoints2, CV_RANSAC);cout << "变换矩阵为:\n" << homo << endl << endl; // 输出映射矩阵      // 计算配准图的四个顶点坐标CalcCorners(homo, image01);cout << "left_top:" << corners.left_top << endl;cout << "left_bottom:" << corners.left_bottom << endl;cout << "right_top:" << corners.right_top << endl;cout << "right_bottom:" << corners.right_bottom << endl;// 图像配准  Mat imageTransform1, imageTransform2;warpPerspective(image01, imageTransform1, homo, Size(MAX(corners.right_top.x, corners.right_bottom.x), image02.rows));// warpPerspective(image01, imageTransform2, adjustMat*homo, Size(image02.cols*1.3, image02.rows*1.8));imshow("直接经过透视矩阵变换", imageTransform1);// 创建拼接后的图,需提前计算图的大小int dst_width = imageTransform1.cols;  // 取最右点的长度为拼接图的长度int dst_height = image02.rows;Mat dst(dst_height, dst_width, CV_8UC3);dst.setTo(0);imageTransform1.copyTo(dst(Rect(0, 0, imageTransform1.cols, imageTransform1.rows)));image02.copyTo(dst(Rect(0, 0, image02.cols, image02.rows)));imshow("b_dst", dst);// 优化拼接处OptimizeSeam(image02, imageTransform1, dst);imshow("dst", dst);waitKey();return 0;
}

  

 

三、利用stitch实现

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/stitching.hpp"
#include <iostream>using namespace std;
using namespace cv;int main(int argc, char* argv[])
{Mat img1 = imread("image1.png", cv::IMREAD_COLOR);Mat img2 = imread("image2.png", cv::IMREAD_COLOR);vector<Mat> imgs;imgs.push_back(img1);imgs.push_back(img2);Mat pano;Ptr<Stitcher> stitcher = Stitcher::create(Stitcher::PANORAMA);Stitcher::Status status = stitcher->stitch(imgs, pano);if (status != Stitcher::OK){cout << "Can't stitch images, error code = " << int(status) << endl;return EXIT_FAILURE;}string result_name = "result1.jpg";imwrite(result_name, pano);cout << "stitching completed successfully\n" << result_name << " saved!";return EXIT_SUCCESS;
}

http://www.hkea.cn/news/168152/

相关文章:

  • 网站如何防止攻击怎么自己做一个小程序
  • 企业网站建设英文百度收录
  • wordpress查版本sem和seo的区别
  • 网站设计说明书怎么写网站建设平台官网
  • 有建网站的软件阿里云域名注册万网
  • 站长工具排名分析怎么创建公司网站
  • 网站建设标书四川seo哪里有
  • 接网站开发做多少钱建一个外贸独立站大约多少钱
  • wordpress表单录入seo报告
  • python做网站显示表格星巴克seo网络推广
  • 一个com的网站多少钱管理微信软件
  • 蒙阴网站建设软文代写网
  • 用python做一旅游网站南昌seo计费管理
  • 湖北省建设厅win10优化软件哪个好
  • 湖南企业建站系统平台软文有哪些发布平台
  • 南通 网络 公司网站真正免费建站
  • 做图骂人的图片网站网络服务
  • wordpress主标题副标题seo基础
  • 淮安做网站优化百度竞价排名是什么方式
  • 食品公司网站源码谷歌网页
  • 做网站用哪种代码比较好推广seo发贴软件
  • 3d效果图软件宁波seo行者seo09
  • 美国做按摩广告的网站网站优化教程
  • wordpress云建站教程信息流广告公司一级代理
  • 我有一个域名怎么做网站百度一下下载
  • 郑州网站建设品牌好安装百度到桌面
  • 株洲做网站定制百度灰色词优化排名
  • 上海网页设计公司兴田德润电话排名优化外包公司
  • 做360网站优化快推广普通话宣传语手抄报
  • 动态网站开发语言有哪些大学生创新创业大赛