国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

qt+opencv實(shí)現(xiàn)圖片編輯器

這篇具有很好參考價(jià)值的文章主要介紹了qt+opencv實(shí)現(xiàn)圖片編輯器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

實(shí)現(xiàn)效果

qt 圖片編輯,ui,qt,開發(fā)語言
qt 圖片編輯,ui,qt,開發(fā)語言

業(yè)務(wù)邏輯

借助QLabel容器,進(jìn)行顯示圖片作為背景,然后重寫QLabel類實(shí)現(xiàn)矩形,直線和圓形的實(shí)現(xiàn)。opencv板塊直接實(shí)現(xiàn)相關(guān)圖片操作。

核心代碼部分

打開圖片

//打開圖片
void Widget::on_pushButton_clicked()
{
    QImage image;
    QString OpenFile;
    OpenFile = QFileDialog::getOpenFileName(this,
                                            "please choose an image file",
                                            "",
                                            "Image Files(*.jpg *.png *.bmp *.pgm *.pbm);;All(*.*)");
    if (OpenFile =="") {
        QMessageBox::warning(this,QString::fromLocal8Bit("錯(cuò)誤"), QString::fromLocal8Bit("打開照片為空!"));
        return;
    }
    file_name = OpenFile;
    is_save = true;
    container_is_empty = false;
    image.load(OpenFile);
    src_img.load(OpenFile);
    current_img.load(OpenFile);
    ui->label->clear();
    QPixmap pixmap = QPixmap::fromImage(image);
    ui->label->resize(QSize(image.width(),image.height()));
    ui->label->setPixmap(QPixmap::fromImage(image));
    ui->label->setScaledContents(true);
    ui->radioButton->setChecked(1);
}

裁切

//裁切
void Widget::btn_cut_img_clicked() {

    if (container_is_empty){
        QMessageBox::warning(this,QString::fromLocal8Bit("錯(cuò)誤"), QString::fromLocal8Bit("照片為空!"));
        return;
    }
    //本地裁剪
    QImage img = ui->label->pixmap()->toImage();
    QImage testImg = img.copy(begin_point.x(), begin_point.y(), end_point.x()-begin_point.x(),end_point.y()-begin_point.y());
    QPixmap resImage = QPixmap::fromImage(testImg);
    resImage.scaled(ui->label->size(), Qt::IgnoreAspectRatio);
    QSize size;
    size.setWidth(testImg.width());
    size.setHeight(testImg.height());

    ui->label->resize(size);
    ui->label->setGeometry(init_pos_x, init_pos_y, end_point.x()-begin_point.x(),end_point.y()-begin_point.y());
    ui->label->setPixmap(resImage);
    current_img = testImg.copy();
    ui->label->setScaledContents(true);
    ui->radioButton->setChecked(1);
    ui->pushButton_5->setEnabled(false);
    is_save = false;

}

改變亮度和對(duì)比度

//改變亮度和對(duì)比度
void Widget::change_bright_and_contact() {
    if (container_is_empty){
        QMessageBox::warning(this,QString::fromLocal8Bit("錯(cuò)誤"), QString::fromLocal8Bit("照片為空!"));
        return;
    }
    bright = ui->spinBox->value();
    contract = ui->spinBox_2->value();
    printf("br= %d,con=%d\n",bright,contract);
    QImage image = ui->label->pixmap()->toImage();
    Mat img = QImageToMat(current_img),res;
    img.convertTo(res,-1,(double)(bright/30+1),contract);
    image = Mat2QImage(res);
    ui->label->setPixmap(QPixmap::fromImage(image));
    ui->label->setScaledContents(true);
    current_img = image.copy();         //保存當(dāng)前圖片
    is_save = false;
}

順時(shí)針旋轉(zhuǎn)和逆時(shí)針旋轉(zhuǎn)文章來源地址http://www.zghlxwxcb.cn/news/detail-597998.html

//順時(shí)針旋轉(zhuǎn)
void Widget::btn_right_rotation() {

    if (container_is_empty){
        QMessageBox::warning(this,QString::fromLocal8Bit("錯(cuò)誤"), QString::fromLocal8Bit("照片為空!"));
        return;
    }
    //順時(shí)針旋轉(zhuǎn)90度
    QMatrix matrix;
    matrix.rotate(90.0);//以90度為例
    QImage image = ui->label->pixmap()->toImage();
    image = image.transformed(matrix,Qt::SmoothTransformation);
    QPixmap pixmap = QPixmap::fromImage(image);
    ui->label->setGeometry(init_pos_x,init_pos_y,image.width(),image.height());
    ui->label->setPixmap(QPixmap::fromImage(image));
    ui->label->setScaledContents(true);
    current_img = image.copy();
    is_save = false;

}

//逆時(shí)針旋轉(zhuǎn)
void Widget::btn_left_rotation() {
    if (container_is_empty){
        QMessageBox::warning(this,QString::fromLocal8Bit("錯(cuò)誤"), QString::fromLocal8Bit("照片為空!"));
        return;
    }
    //逆時(shí)針旋轉(zhuǎn)90度
    QMatrix matrix;
    matrix.rotate(-90.0);//以90度為例
    QImage image = ui->label->pixmap()->toImage();
    image = image.transformed(matrix,Qt::SmoothTransformation);
    QPixmap pixmap = QPixmap::fromImage(image);
    ui->label->setGeometry(init_pos_x,init_pos_y,image.width(),image.height());
    ui->label->setPixmap(QPixmap::fromImage(image));
    ui->label->setScaledContents(true);
    current_img = image.copy();
    is_save = false;

}

重寫的QLabel

//
// Created by ROG on 2022/10/13.
//

#include "MyLabel.h"
#include<QDebug>
#include <QMouseEvent>
#include <QPainter>
#include <QRect>
#include<QLabel>
extern bool rectangle_value = false;
extern bool circle_value = false;
extern bool line_value = false;
extern bool is_operate_check = false;
extern QPoint begin_point={0,0},end_point={0,0};
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
}
//鼠標(biāo)按下
void MyLabel::mousePressEvent(QMouseEvent *ev)
{
    //當(dāng)鼠標(biāo)左鍵按下  提示信息
    if( ev->button() ==  Qt::LeftButton && (rectangle_value || line_value || circle_value))
    {
        m_isMousePress = true;
        //獲取點(diǎn)坐標(biāo)
        m_beginPoint = ev->pos();
        qDebug()<<"00"<<m_beginPoint;
        //update();
    }else if (ev->button() ==  Qt::LeftButton && is_operate_check){
        //記錄初始坐標(biāo)
        OldPos = ev->pos();
        Pressed = true;
    }
}


//鼠標(biāo)釋放
void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{
    if(ev->button()==Qt::LeftButton && (rectangle_value || line_value || circle_value))
    {
        m_endPoint = ev->pos();
        m_isMousePress = false;
        qDebug()<<"00"<<m_endPoint;
        begin_point = m_beginPoint;
        end_point = m_endPoint;
        update();
    }else if (ev->button()==Qt::LeftButton && is_operate_check){
        Pressed = false;
        setCursor(Qt::ArrowCursor);
    }




}
//鼠標(biāo)移動(dòng),更新矩形框
void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{
    if( ev->buttons() &   Qt::LeftButton && (rectangle_value || line_value || circle_value))
    {
        m_midPoint=ev->pos();
        update();
    }else if (ev->buttons() &   Qt::LeftButton && is_operate_check){
        this->setCursor(Qt::SizeAllCursor);
        QPoint pos = ev->pos();
        int xPtInterval = pos.x() - OldPos.x();
        int yPtInterval = pos.y() - OldPos.y();

        XPtInterval += xPtInterval;
        YPtInterval += yPtInterval;

        OldPos = pos;

        this->setGeometry(XPtInterval,YPtInterval, this->width(), this->height());

        update();
    }
}


//畫畫
void MyLabel::paintEvent(QPaintEvent *ev)
{
    QLabel::paintEvent(ev);//先調(diào)用父類的paintEvent為了顯示'背景'!!!

    QPainter m_painter(this);


    m_painter.setPen(QPen(Qt::red,2));
    m_painter.save();
    if (m_isMousePress)
    {
        if (rectangle_value) m_painter.drawRect(QRect(m_beginPoint,m_midPoint));
        else if (circle_value) m_painter.drawEllipse(QRectF(m_beginPoint,m_midPoint));
        else if (line_value) m_painter.drawLine(m_beginPoint,m_midPoint);
    }
    else if (!m_isMousePress )
    {
        if (rectangle_value) m_painter.drawRect(QRect(m_beginPoint,m_endPoint));
        else if (circle_value) m_painter.drawEllipse(QRectF(m_beginPoint,m_endPoint));
        else if (line_value) m_painter.drawLine(m_beginPoint,m_endPoint);
    }
    m_painter.restore();

}




到了這里,關(guān)于qt+opencv實(shí)現(xiàn)圖片編輯器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Yjs + Quill 實(shí)現(xiàn)文檔多人協(xié)同編輯器開發(fā)(基礎(chǔ)+實(shí)戰(zhàn))

    Yjs + Quill 實(shí)現(xiàn)文檔多人協(xié)同編輯器開發(fā)(基礎(chǔ)+實(shí)戰(zhàn))

    ? ? ? ? 感謝大家對(duì)文章的關(guān)注哈,大家提出的無法在不同瀏覽器協(xié)同的問題,經(jīng)過兩天多的學(xué)習(xí)研究,終于是解決了。目前版本已經(jīng)正常提到 git 上了, 運(yùn)行腳本:npm run?startServer,是通過WebRTC 的形式實(shí)現(xiàn)協(xié)同(該方案僅支持內(nèi)網(wǎng)系統(tǒng),因?yàn)閣ebRTC在外網(wǎng)使用需要stun 服務(wù)支

    2024年02月10日
    瀏覽(23)
  • C#時(shí)間軸曲線圖形編輯器開發(fā)2-核心功能實(shí)現(xiàn)

    C#時(shí)間軸曲線圖形編輯器開發(fā)2-核心功能實(shí)現(xiàn)

    目錄 三、關(guān)鍵幀編輯 1、新建Winform工程 (1)界面布局 ?(2)全局變量 2、關(guān)鍵幀添加和刪除 (1)鼠標(biāo)在曲線上識(shí)別 (2)鍵盤按鍵按下捕捉 (3)關(guān)鍵幀添加、刪除 ?(4)修改關(guān)鍵幀值 3、曲線插值 (1)三次樣條插值 (2)工程代碼下載鏈接 四、曲線數(shù)據(jù)導(dǎo)出和讀取 1、數(shù)

    2024年02月15日
    瀏覽(32)
  • DAY1,Qt [ 手動(dòng)實(shí)現(xiàn)登錄框(信息調(diào)試類,按鈕類,行編輯器類,標(biāo)簽類的使用)]

    DAY1,Qt [ 手動(dòng)實(shí)現(xiàn)登錄框(信息調(diào)試類,按鈕類,行編輯器類,標(biāo)簽類的使用)]

    ---mychat.h---頭文件 ---mychar.cpp---源文件 ---main.cpp---測試文件 結(jié)果--- ? ?

    2024年02月14日
    瀏覽(16)
  • Unity3d C#利用Editor編輯器拓展實(shí)現(xiàn)配置UI背景樣式一鍵設(shè)置UI背景樣式功能(含源碼)

    Unity3d C#利用Editor編輯器拓展實(shí)現(xiàn)配置UI背景樣式一鍵設(shè)置UI背景樣式功能(含源碼)

    在開發(fā)UI滾動(dòng)列表的時(shí)候,經(jīng)常會(huì)有每項(xiàng)的背景圖不統(tǒng)一的情況,會(huì)間隔重復(fù)的情況居多。這種情況下,手動(dòng)去設(shè)置間隔一行的背景圖或者顏色是比較麻煩的。在此背景下,筆者嘗試寫個(gè)小工具,在搭建UI時(shí)配置一下循環(huán)背景的樣式,可以通過一鍵點(diǎn)擊后設(shè)置UI背景的樣式,省

    2024年02月03日
    瀏覽(29)
  • 【NKeditor】富文本編輯器上傳圖片

    【NKeditor】富文本編輯器上傳圖片

    使用NKeditor富文本編輯器上傳圖片,同時(shí)上傳到七牛云存儲(chǔ)上。后端語言使用ThinkPHP。 下載地址:NKeditor: NKedtior是一款優(yōu)秀的輕量級(jí)Web編輯器,基于 Kindedior 二次開發(fā) 里面的文檔demo寫的比較詳細(xì),可以直接使用,不過里面上傳七牛云的代碼不能用,所以我是自己寫的。? ?把

    2024年02月10日
    瀏覽(98)
  • 秀米編輯器(xiumi)+百度編輯器(Ueditor) 集成 :解決集成問題,秀米編輯器導(dǎo)出到百度編輯器格式問題,圖片保存到自己的服務(wù)器(阿里云OSS)

    秀米編輯器(xiumi)+百度編輯器(Ueditor) 集成 :解決集成問題,秀米編輯器導(dǎo)出到百度編輯器格式問題,圖片保存到自己的服務(wù)器(阿里云OSS)

    1.集成前提條件: ????????1. 需要集成 百度編輯器 到環(huán)境中 ????????2. https 環(huán)境下才可以導(dǎo)出數(shù)據(jù)到百度編輯器,如果不是https環(huán)境,會(huì)出現(xiàn)錯(cuò)誤 ???????? 然后我們開始講解如何集成: 2.引入資源: //百度編輯器 需要修改的文件(配置與原始的配置不一樣,后面

    2024年02月09日
    瀏覽(90)
  • 4.1 Bootstrap UI 編輯器

    4.1 Bootstrap UI 編輯器

    以下是 15 款最好的 Bootstrap 編輯器或者是在線編輯工具。 這是一個(gè) Bootstrap 主題生成器,使用最新的 Bootstrap 3 版本和 Angular JS 版本,提供一個(gè)鮮活的用戶修改預(yù)覽。它包括了各種各樣的導(dǎo)入,一個(gè)顏色選擇器和智能的預(yù)先輸入。更神奇的是,Bootstrap 會(huì)根據(jù)用戶的每個(gè)選擇來

    2024年02月15日
    瀏覽(23)
  • wangEditor富文本編輯器圖片/視頻上傳

    wangEditor富文本編輯器圖片/視頻上傳

    wangEditor 有豐富的 API 和足夠的擴(kuò)展性,允許我們自定義開發(fā)菜單、模塊、插件等。在 Vue、React 中運(yùn)用也很方便。因此本文介紹下vue中富文本上傳圖片和視頻。 安裝引入后富文本有顯示上傳圖片按鈕,點(diǎn)擊上傳后會(huì)報(bào) 沒有配置上傳地址 的錯(cuò)誤,如下圖所示: 所以自定義上傳

    2024年02月15日
    瀏覽(95)
  • tinymce4/5實(shí)現(xiàn)將word中內(nèi)容(文字圖片等)直接粘貼至編輯器中——利用插件tinymce-powerpaste-plugin

    tinymce4/5實(shí)現(xiàn)將word中內(nèi)容(文字圖片等)直接粘貼至編輯器中——利用插件tinymce-powerpaste-plugin

    TinyMCE是一款易用、且功能強(qiáng)大的所見即所得的富文本編輯器。同類程序有:UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。 TinyMCE的優(yōu)勢: 開源可商用,基于LGPL2.1 插件豐富,自帶插件基本涵蓋日常所需功能(示例看下面的Demo-2) 接口豐富,可擴(kuò)展性強(qiáng),有

    2024年02月15日
    瀏覽(29)
  • android項(xiàng)目實(shí)戰(zhàn)之編輯器圖片上傳預(yù)覽

    現(xiàn)狀分析 項(xiàng)目的需求用到編輯器,編輯器中又可能用到圖片上傳功能。 實(shí)現(xiàn)方案 1. 增加依賴庫,可以參考前面的幾篇文章,都有描述。 2. 核心代碼實(shí)現(xiàn) 歡迎點(diǎn)贊、收藏、轉(zhuǎn)發(fā)。

    2024年02月04日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包