日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT“图片转文字”

發布時間:2023/12/10 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT“图片转文字” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你想找的是“文字識別”,可以看看QT使用PaddleOCR文字識別是不是你想要的

環境

Windows7
Qt Creator 4.5.1 (MSVC2017_64)
Qt 5.10.1

效果圖

源碼下載

可以從github imgtotext下載代碼

部分代碼及原理

距離第一次看到這種“圖片”怕是有年頭了,最近突然想自己實現一個試試,應該說這個程序的原理和代碼都不復雜,不過想要較高的運行速度或者處理視頻的話可能要借助其他圖形處理庫并花點心思優化。
用各種語言和工具寫了類似程序的人估計都不少了,畢竟網絡上時有遇見,而且感覺有經驗的人實現這個也就是隨手的事,然而其他想知道是如何實現的人就不是很容易找到答案了,換了好幾種我認為可以描述這個效果的短語,發現都有描述相近但更受關注的問題,比如搜“圖片轉文字”的結果基本都是“文字識別”相關的……

一句話概括原理的話,就是用文字來代替圖片中的像素點,文字筆畫比較稀疏的文字用來表示較淺的顏色,較密的則用來表示深色即可。

剩下的要解決的問題就是找到一種工具可以操作圖片的像素并考慮如何進行具體的操作了。

QT的QImage類即可完成上述的任務。

std::vector<QString> textPixel;textPixel.push_back(QString::fromLocal8Bit("一"));//8個漢字代表8種顏色textPixel.push_back(QString::fromLocal8Bit("乙"));//從上到下由淺入深textPixel.push_back(QString::fromLocal8Bit("大"));//使用更多的漢字未必能獲得更好的效果textPixel.push_back(QString::fromLocal8Bit("丙"));//一是因為這種圖能表示的像素數量本身就很有限textPixel.push_back(QString::fromLocal8Bit("交"));//二是漢字的疏密程度也不是很好分級,就難以對應更多的顏色textPixel.push_back(QString::fromLocal8Bit("羽"));textPixel.push_back(QString::fromLocal8Bit("拜"));textPixel.push_back(QString::fromLocal8Bit("慧"));//fromLocal8Bit是為了正確的顯示漢字QString imgPath=QFileDialog::getOpenFileName(this,"Choose Image","","Image File(*.png *.jpg *.bmp)");if(imgPath.size()==0){return;}ui->textBrowser->clear();QImage q(imgPath);m_label->resize(ui->widget->size());m_label->setPixmap(QPixmap::fromImage(q.scaled(m_label->size(),Qt::KeepAspectRatio)));m_label->show();q=q.convertToFormat(QImage::Format_Grayscale8);//將圖片轉換為黑白的q=q.scaledToWidth(pix);//調整圖片大小,使水平方向的像素點為pix個q.invertPixels();//反置圖片顏色,這步可以省略//如果省略,越亮的像素點顏色數值越大,后面替換成文字的時候就得繞個彎for(int i=0;i<q.height();++i){for(int j=0;j<q.width();++j){//逐一掃描圖片中的像素點,黑白圖片的顏色由0-255的整形數字表示//我們一共使用了8個漢字,那么就將顏色值除以32將其分成八組即可,這里可以使用哈希表優化ui->textBrowser->insertPlainText(textPixel[qRed(q.pixel(j,i))/32]);}ui->textBrowser->insertPlainText("\n");}

代碼中有漢字經常帶來問題……如果你編譯時出現“常量中含有換行符”的錯誤,可以如下圖設置,或者使用英文等字符替換像素。

這個程序沒做什么優化,雖然我設置的像素區間比較大(5-1080),但當你每行使用較多像素點時(大概是200以上?畢竟O(N2)…),會非常耗時,程序會卡住很長時間,慎用。

總結

以上是生活随笔為你收集整理的QT“图片转文字”的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。