matlab如何用代碼導入文件_20+行Matlab代碼實現文件掃描

7bdcc877aaf05f8bcd609da5e64a7d43.png

最近剛好看到一篇回答,用閾值二值化處理圖片水印,受到啟發寫此代碼。閾值二值化適合處理只有黑白兩色的圖片,考慮到文件蓋章,這里作者使用像素顏色替換及灰度值處理圖片,進一步提高處理精度和能力。

我們需要:Matlab軟件,手機拍的文件圖片

2019.2.22修改:根據評論區建議,刪除循環,將代碼全部矩陣化

首先讀入圖片

filename='TestPic.jpg';%圖片名稱,默認與代碼在同一文件夾下
img=imread(filename);%讀入圖片

獲取圖片RGB值

R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);

篩選圖片紅色

red=(R>=100).*(R<=255).*(G<110).*(B<110);%判斷是否為紅色并得到紅色區域布爾矩陣
%這里的.*為矩陣元素各自相乘,直接使用*為矩陣乘法
%這里偷了個懶,乘法在這里的作用是矩陣相與%修改紅色區域顏色
R(red==1)=255;
G(red==1)=70;
B(red==1)=70;

這里,RGB數值不固定,可以根據具體圖片重新調整。這里作者事先在PS里查看了原圖紅色區域RGB數值。如果你不會PS,那……總有別的辦法搞到RGB吧……實在不行咱一點點調嘛。

808598eda965005efff7c5296b417506.png
在PS中查看像素RGB值

篩選圖片白色

將所有像素的灰度值計算出來。這里,灰度是用來判斷“白”和“黑”的工具,當灰度大于某一值,我們認為其應該為白色,將該像素完全修改為白色。其余顏色不予改動。

gray=R.*0.299+G.*0.587+B.*0.114;%灰度值計算,得到灰度值矩陣
white=(gray>120)-red;%將灰度中的紅色區域剔除,得到白色矩陣%將白色區域完全變白
R(white==1)=255;
G(white==1)=255;
B(white==1)=255;

ps:這樣做的好處之一是,只讓白的地方更白,其他比較復雜的區域未作改變,圖片不至于偏離事實。

顏色覆蓋

這里我們將之前轉換好的RGB圖層全部賦值給res變量,res變量即最終結果。

res(:,:,1)=R(:,:);
res(:,:,2)=G(:,:);
res(:,:,3)=B(:,:);

圖片保存

imwrite(res,'stripes2.png');%保存圖片

至此,這20行代碼已經能自動將你手機拍的圖片轉換為“掃描文件”了

需要注意的是,拍攝圖片的時候最好在文件正上方,拍完有條件地話可以裁剪一下,這些手機自帶的軟件都可以搞定。

全部完整代碼如下:

clc;
clear all;
filename='TestPic.jpg';%圖片名稱,默認與代碼在同一文件夾下
img=imread(filename);%讀入圖片
%獲取RGB圖層
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);red=(R>=100).*(R<=255).*(G<110).*(B<110);%判斷是否為紅色并得到紅色區域布爾矩陣
%這里的.*為矩陣元素各自相乘,直接使用*為矩陣乘法
%這里偷了個懶,乘法在這里的作用是矩陣相與%修改紅色區域顏色
R(red==1)=255;
G(red==1)=70;
B(red==1)=70;gray=R.*0.299+G.*0.587+B.*0.114;%灰度值計算,得到灰度值矩陣
white=(gray>120)-red;%將灰度中的紅色區域剔除,得到白色矩陣%將白色區域完全變白
R(white==1)=255;
G(white==1)=255;
B(white==1)=255;disp('轉換結束');res(:,:,1)=R(:,:);
res(:,:,2)=G(:,:);
res(:,:,3)=B(:,:);imwrite(res,'stripes2.png');%保存圖片
disp('圖片已保存');

原圖是我在網上隨便找的一張,作者使用的軟件是Matlab R2016a

文件處理效果如下:

a155eddeef07c237e9f5093ba4bd4049.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452942.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聊聊Code Review

轉載&#xff1a;https://richardcao.me/2016/09/30/Talk-About-Codereview/ 最近思考一個問題&#xff0c;如何進行高效的codereview&#xff0c;有沒有好的工具可以使用&#xff0c;于是花了兩三天時間在Google里淘了一番&#xff0c;這里留下記錄。 Phabricator 首屈一指的c…

項目管理十大趨勢

趨勢一、更多中國企業成立項目管理辦公室&#xff0c;項目管理辦公室也發揮更大的作用 在國內&#xff0c;仍有很多企業每年有成百上千的項目實施&#xff0c;而公司卻沒有成立項目管理辦公室&#xff0c;或者已經有了PMO&#xff0c;但是PMO仍在履行一些較為基礎的職能。 沒…

啟動django服務器報錯raise errorclass(errno, errval) django.db.utils.InternalError

問題描述&#xff1a; 啟動django服務器python manage.py runserver報錯: raise errorclass(errno, errval) django.db.utils.InternalError: (1366, “Incorrect string value: ‘\xE7\x94\xA8\xE6\x88\xB7’ for column ‘name’ at row 1”) 原因&#xff1a;與mysql數據庫…

java單例模式之線程安全問題

單例的目的是為了保證運行時Singleton類只有唯一的一個實例&#xff0c;用于一些較大開銷的操作。 餓漢式&#xff08;沒有線程安全問題&#xff09;: ‘ 由于使用static關鍵字進行了修飾&#xff0c;只能獲取到一個對象&#xff0c;從而達到了單例&#xff0c;并且在Singleton…

路由協議和路由算法的不同

網絡上的主機、路由器通過路由選擇算法形成路由表&#xff0c;以確定發送分組的傳輸路徑。而路由選擇協議是路由器用來完成路由表建立和路由信息更新的通信協議。

2003 r2 64 iis php mysql_關于在win2003中,iis+php+mysql 配置的問題

IIS中配置PHP服務器(iis6.0php5.2.6mysql)&#xff0c;步驟如下&#xff1a;1.我下的是php5.2.6_win32 &#xff0c;下載后&#xff0c;解壓到d:\phpwin下面2.然后從其中找到一個叫php.ini-recommended的文件,更名為php.ini3.打開該文件&#xff0c;找到extension_dir ".…

448. Find All Numbers Disappeared in an Array 尋找有界數組[1,n]中的缺失數

&#xff3b;抄題&#xff3d;&#xff1a; Given an array of integers where 1 ≤ a[i] ≤ n (n size of array), some elements appear twice and others appear once. Find all the elements of [1, n] inclusive that do not appear in this array. Could you do it with…

數據結構與算法--1.整型變量值互換

問題: 給定兩個整型變量a,b,在不使用其他變量的情況下&#xff0c;實現兩個變量值的交換。 """ 問題:整型變量值互換 給定兩個整型變量a,b,在不使用其他變量的情況下&#xff0c;實現兩個變量值的交換。 """ a 1234 b 5678 print("binar…

什么是真正的高清,你知道嗎?

摘要&#xff1a;高清&#xff0c;英文為“High Definition”&#xff0c;意思是“高分辨率”。一般所說的高清&#xff0c;有四個含義&#xff1a;高清電視&#xff0c;高清設備&#xff0c;高清格式&#xff0c;高清電影。 高清&#xff0c;英文為“High Definition”&#x…

oracle11g中SQL優化(SQL TUNING)新特性之SQL Plan Management(SPM)

1. 簡介 Oracle Database11gR1引進了SQL PlanManagement&#xff08;簡稱SPM&#xff09;&#xff0c;一套允許DBA捕獲和保持任意SQL語句執行計劃最優的新工具&#xff0c;這樣&#xff0c;限制了刷新優化器統計數據&#xff0c;已有應用改變&#xff0c;甚至數據庫版本升級帶…

Linux基本命令+Makefile

1.linux下查看進程占用cpu的情況(top)&#xff1b; 格式 top [&#xff0d;] [d delay] [q] [c] [S] [s] [i] [n] 主要參數 d&#xff1a;指定更新的間隔&#xff0c;以秒計算。q&#xff1a;沒有任何延遲的更新。如果使用者有超級用戶&#xff0c;則top命令將會以最高的優先…

數據結構與算法--2.數組的定位排序

問題&#xff1a; 給定一個數組A以及下標i&#xff0c;將數組元素進行調整&#xff0c;使得所有比A[i]小的元素排在前邊&#xff0c;接著是所有等于A[i]的元素&#xff0c;最后排列的是比A[i]大的元素 思路&#xff1a; 第一步&#xff1a;將數組分成兩部分&#xff0c;一部…

mysql語法題_mysql數據庫題語法練習

一、練習。導入下面sql執行語句/*數據導入&#xff1a;Navicat Premium Data TransferSource Server : localhostSource Server Type : MySQLSource Server Version : 50624Source Host : localhostSource Database : sqlexamTarget Server Type : MySQLTarget Server Version …

ipv4的不足

v地址基本耗盡&#xff0c;這是當前最棘手的問題v路由表越來越大v功能不足&#xff0c;缺少對多媒體信息傳輸的支持v缺少對高速傳輸的支持v缺少對安全的支持v缺少對主機漫游的支持

OpenGL開發庫的詳細介紹

OpenGL開發庫的組成 開發基于OpenGL的應用程序&#xff0c;必須先了解OpenGL的庫函數。它采用C語言風格&#xff0c;提供大量的函數來進行圖形的處理和顯示。OpenGL庫函數的命名方式非常有規律。所有OpenGL函數采用了以下格式<庫前綴><根命令><可選的參數個數&g…

thinkphp5運行原理_ThinkPHP5.1~5.2全版本遠程代碼執行高危漏洞預警

漏洞綜述關于ThinkPHPThinkPHP是一個快速、兼容而且簡單的輕量級國產PHP開發框架&#xff0c;其借鑒了國外很多優秀的框架和模式&#xff0c;包括使用面向對象的開發結構和MVC模式&#xff0c;融合了Struts的思想和TagLib(標簽庫)、RoR的ORM映射和ActiveRecord模式等。該框架常…

ASP.NET MVC中controller和view相互傳值的方式

ASP.NET MVC中Controller向view傳值的方式&#xff1a; ViewBag、ViewData、TempData單個值的傳遞Json匿名類型ExpandoObjectCookieViewModel(向普通View頁面傳個Model對象、向強類型頁面傳一個Model對象、用一個ViewModel對象解決所有問題)ASP.NET MVC中view向Controller傳值的…

自定義SeekBar 實時顯示百分比進度

進度下方實時顯示百分比進度禁止掉了SeekBar的滑動事件 詳情 githus地址

數據結構與算法--3.字符串的旋轉

題目&#xff1a; A是含有n個元素的數組&#xff0c;如果可以申請到最大內存&#xff0c;那么把A從位置i開始旋轉是比較簡單的。例如&#xff1a;A:a,b,c,d,e.其中i3,旋轉后的字符串A為&#xff1a;d,e,a,b,c要求設計一個時間復雜度為O(n),空間復雜度為O(1)的算法&#xff0c;…

三網融合情況下,實時語音通信技術解決之道

隨著技術和標準的不斷成熟,伴隨著“三網合一”的大潮,VoIP可望成為下一代電信基礎設施結構的楊心,使未來各電信業務綜合統一在IP網絡上成為可能,導致數據的融合和未來電信市場的重組,并帶來新的經濟模式和價值鏈。 Internet在全世界范圍內的快速發展和語音信號處理技術的進步,促…