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

国外最新创意产品网站有哪些方面排名优化公司哪家靠谱

国外最新创意产品网站有哪些方面,排名优化公司哪家靠谱,网站建设创业,wordpress 百度地图插件本文主要介绍怎样使用opencv来对图片进行傅里叶变换,其核心函数是opencv自带的dft()。DFT这个技术手段是将空间域映射到频率域中去,在图像处理有着举足轻重的地位。这里我们只是得到其变换的结果并看看贫域图有什么特点。 开发环境:opencv2.4…

  本文主要介绍怎样使用opencv来对图片进行傅里叶变换,其核心函数是opencv自带的dft()DFT这个技术手段是将空间域映射到频率域中去,在图像处理有着举足轻重的地位。这里我们只是得到其变换的结果并看看贫域图有什么特点。

  开发环境:opencv2.4.2+Qt4.8.2+ubuntu12.04+QtCreator2.5

 

  实验功能:

  1. 单击Open Image按钮,手动选择打开一副图片,不管其是否是彩色图片,这里统一将其转换成灰度图像显示,因为需要加快DFT运算速度。

  2. 将鼠标移动到图片显示区域,单击图片,这时会显示DFT中间结果图,也就是没有将低频域的点移动到图片的中心而已。显示的图片有文字提示。

  3. 继续单击图片,会显示最后重新布局后的DFT结果图,当然也有相应的文字提示。

  4. 继续单击图片时,则原图,dft未调整图,dft调整图这3幅图片会进行轮流切换显示。

  5. 如果没有打开图片就在图片显示区域单击,则会在图片显示区域显示相应的提示文字,提示需先打开图片。

     

  实验说明:

  1. 1维的离散序列的DFT变换公式为:

     

    2维的离散矩阵的DFT变换公式为:

     

  2. QTextBrowser中怎样相应鼠标单击事件呢?

    QTextBrowser来显示图片(不用显示文本),当图片显示好了后想单击该图片转到某一个图像处理过程函数中去(这里就是进行离散傅里叶变换),但是在QTextBrowsersingal/slot中找不到其对应的鼠标单击的信号。因此只能自己写该信号函数了,可是对应捕捉鼠标单击的函数库中应该有,那该怎么写呢?网上有篇不错的文章:http://www.embedu.org/Column/Column421.htm

    仿照上面的文章,自己重新写一个类MyTextBrowser,从基类QTextBrowser中继承而来,然后重写该类的mousePressEvent函数,其实类似这样的函数是系统提供的,有点类似MFC中的消息响应机制,在该函数中发出信号即可。这样当鼠标按下时,就发出了一个clicked()的信号,然后在主界面中响应该信号对应的槽函数就ok了。

    当要使用新建的MyTextBrowser类代替原先的QTextBrowser时,只需打开.ui设计文件,在Object栏中找到对应的object,然后右键选择进入Promoted Widgets,add一个MyTextBrwoser即可。

  3. int getOptimalDFTSize(int vecsize)

    该函数是为了获得进行DFT计算的最佳尺寸。因为在进行DFT时,如果需要被计算的数字序列长度vecsize2n次幂的话,那么其运行速度是非常快的。如果不是2n次幂,但能够分解成2,3,5的乘积,则运算速度也非常快。这里的getOptimalDFTSize()函数就是为了获得满足分解成2,3,5的最小整数尺寸。很显然,如果是多维矩阵需要进行DFT,则每一维单独用这个函数获得最佳DFT尺寸。

  4. void copyMakeBorder(InuptArray src, OutputArray dst, int top , int bottom, int left, int right, int borderType, const Scalar& value=Scalar())

    该函数是用来扩展一个图像的边界的,第36个参数分别为原始图像的上下左右各扩展的像素点的个数,第7个参数表示边界的类型,如果其为BORDER_CONSTANT,则扩充的边界像素值则用第8个参数来初始化。将src图像扩充边界后的结果保存在dst图像中。

  5. merge()函数是把多个但通道数组连接成1个多通道数组,而split()函数则相反,把1个多通道函数分解成多个但通道函数。

  6. Void magnitude(InputArray x, InputArray y, OutPutArray magnitude)

    该函数是计算输入矩阵xy对应该的每个像素平方求和后开根号保存在输出矩阵magnitude中。

  7. 函数log(InputArray src, OutputArray dst)是对输入矩阵src中每个像素点求log,保存在输出矩阵dst的相对应的位置上。

  8. 因为Qt中显示图片,如果图片类型为亮度图像,即其像素值为01之间,则显示出来的是全黑的图像。所以为了似图片显示正常,必须全部扩大255被,使之在0255之间。当然了,如果是opencv自带的imshow()函数,对于这样的值在01之间图像它会自动识别,并且有个术语称之为亮度图像。

     

  实验结果:

  打开一张图片,并灰度显示如下:

  

 

 

  DFT中间结果图,未重新排列的效果:

  

 

 

  DFT最终排列后的效果图:

  

 

  

 

 

  如果没有打开图片单击图片显示区域,提示如下:

  

 

 

实验主要部分代码及其注释(附录有工程code下载链接地址)

MainWindo.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <iostream>
#include <QFileDialog>using namespace std;MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);ui->textBrowser->setFont( QFont("Times New Roman", 30) );display_num = 0;QObject::connect( ui->textBrowser, SIGNAL(clicked()), this, SLOT(on_mytextBrowser_clicked()) );
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_openButton_clicked()
{/*读入图片并显示,将图片以灰度形式读入*/QString img_name = QFileDialog::getOpenFileName( this, "Open Image", "../dft", tr("Image Files(*.png *.jpg *.bmp *.jpeg)") );src = imread( img_name.toAscii().data(), CV_LOAD_IMAGE_GRAYSCALE );src.copyTo( src_1 );//
    putText( src_1, "The original image:", Point(0, 50), 2, 1, Scalar::all(0), 2 );imwrite( "../dft/src_1.jpg", src_1 );ui->textBrowser->setFixedHeight( src.rows );ui->textBrowser->setFixedWidth( src.cols );ui->textBrowser->clear();ui->textBrowser->append( "<img src=../dft/src_1.jpg>" );display_num = 1;
}void MainWindow::on_closeButton_clicked()
{close();
}void MainWindow::on_mytextBrowser_clicked()
{display_num ++;//扩展成为DFT最佳运算尺寸;
    Mat padded;int opw = getOptimalDFTSize( src.cols );int oph = getOptimalDFTSize( src.rows );copyMakeBorder( src, padded, 0, oph-src.rows, 0, opw-src.cols, BORDER_CONSTANT, Scalar::all(0) );//为计算出的虚数增加1个通道Mat planes[] = {Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F)};Mat complexI;merge( planes, 2, complexI );dft( complexI, complexI );//支持图像原地计算,调用opencv的dtf函数进行DFT计算//得到赋值图像,取了对数
    split( complexI, planes );magnitude( planes[0], planes[1], planes[0] );Mat log_img = planes[0];log_img += Scalar::all(1);cv::log( log_img, log_img );log_img = log_img(Rect(0, 0, log_img.cols & -2, log_img.rows & -2 ));//DFT结果dst = log_img.clone();cv::normalize( dst, dst, 0, 1, CV_MINMAX );dst =  255.*dst;if( 1 == display_num ){if( src.empty() ){ui->textBrowser->setTextColor( Qt::red );ui->textBrowser->append("Please open one image first!");}else{ui->textBrowser->clear();ui->textBrowser->append( "<img src =../dft/src_1.jpg>");}}else if( 2 == display_num ){/*7. 因为Qt中显示图片,如果图片类型为亮度图像,即其像素值为0~1之间,则显示出来的是全黑的图像。*所以为了似图片显示正常,必须全部扩大255被,使之在0~255之间。当然了,如果是opencv自带的imshow()函数,*对于这样的值在0~1之间图像它会自动识别,并且有个术语称之为亮度图像。*/dst.copyTo( dst_1 );putText( dst_1, "DFT without rearranged image:", Point(0, 50), 3, 0.8, Scalar::all(0), 2 );imwrite( "../dft/dst_1.jpg", dst_1 );ui->textBrowser->clear();ui->textBrowser->append( "<img src=../dft/dst_1.jpg>" );}else if( 3 == display_num ){display_num = 0;//原图,dft未调整图,dft调整图3幅图片进行轮流切换。
dst.copyTo( dst_2 );int cx = dst_2.cols/2;int cy = dst_2.rows/2;Mat q0( dst_2, Rect(0, 0, cx, cy) );Mat q1( dst_2, Rect(cx, 0, cx, cy) );Mat q2( dst_2, Rect(0, cy, cx, cy) );Mat q3( dst_2, Rect(cx, cy, cx, cy) );Mat temp;//因为是共用数据的,所以下面的q0,q1,q2,q3的改变也会导致dst_2的改变。
        q0.copyTo( temp );q3.copyTo( q0 );temp.copyTo( q3 );q1.copyTo( temp );q2.copyTo( q1 );temp.copyTo( q2 );putText( dst_2, "DFT with rearranged image", Point(0, 50), 1, 2, Scalar::all(0), 2, 8 );imwrite( "../dft/dst_2.jpg", dst_2 );ui->textBrowser->clear();ui->textBrowser->append( "<img src=../dft/dst_2.jpg>" );}}

 

 

mytextbrowser.cpp:

#include "mytextbrowser.h"MyTextBrowser::MyTextBrowser(QWidget *parent) :QTextBrowser(parent)
{this->setMouseTracking( true );
}void MyTextBrowser::mousePressEvent(QMouseEvent *ev)
{//   this->setCursor( Qt::PointingHandCursor );//设置光标的形状为手型。但感觉貌似不起作用emit this->clicked();
}void MyTextBrowser::mouseMoveEvent(QMouseEvent *ev)
{//  this->setCursor( Qt::SizeAllCursor );//设置光标的形状为手型。
}

 

  实验总结:

  通过本次实验,对Qt中的信号与槽机制有了更深入的认识。另外对图像的DFT计算有了进一步的理解。


  附:工程code下载。

 

 

 

http://www.lbrq.cn/news/2638477.html

相关文章:

  • 附近那里有做网站的公司做网站一般多少钱
  • 网站建设及应用实施方案软文案例300字
  • 网站项目策划大纲网站公司
  • 什么更新wordpress河南关键词优化搜索
  • 做网站的书知乎免费创建属于自己的网站
  • 交河做网站价格亚马逊跨境电商个人开店
  • 我是做废品回收,最近有个变宝网主动联系我说是再生资源网站的,可信吗?做专业搜索引擎优化
  • 网站建设的功能有哪些建网站需要哪些步骤
  • 公司基础建设的意义湖南seo优化价格
  • 邢台哪里做网站湖南seo推广多少钱
  • 做的好的购物网站目前搜索引擎排名
  • 类网站建设淘宝代运营1个月多少钱
  • 莱芜做网站的商家有哪些常德今日头条新闻
  • 最便宜网站推广公司产品
  • 网站的主题网站浏览器
  • 沈阳网站做app推广公司
  • ubuntu server wordpress石家庄seo网站管理
  • 免费推广seo本溪seo优化
  • 靖江网站微信营销软件免费版
  • 龙岩电商公司seo搜索引擎排名优化
  • 合肥晨曦网站建设互联网营销师证书
  • 鞍山建设工程信息网站武汉推广服务
  • 怎么做创业网站爱站工具
  • 重庆做商城网站设计免费建网页
  • 用.net core 做网站google chrome
  • 泰州网站建设服务热线论文关键词
  • 网站建设 自己的服务器电商推广
  • 自己做的网站响应速度慢百度推广的步骤
  • 深圳方维网站建设seo顾问服务 乐云践新专家
  • 专业做网站咨询seo点击排名器
  • Python的七大框架对比分析
  • [案例十] NX二次开发批量替换组件功能(装配环境)
  • 关于csdn导入和导出
  • Springboot2+vue2+uniapp 实现搜索联想自动补全功能
  • MySQL聚簇索引与非聚簇索引详解
  • 超高车辆如何影响城市立交隧道安全?预警系统如何应对?