利用C語言實現計算機圖像處理的方法

1.圖像平移

圖像平移只是改變圖像在屏幕上的位置,圖像本身并不發生變化。
假設原圖像區域左上角坐標為(x0, y0),右下角坐標為(x1, y1),將圖像分別沿x和y軸平移dx和dy,則新圖像的左上角坐標為(x0 + dx, y0 + dy),右下角坐標為(x1 + dx, y1 + dy)。坐標平移變換公式為:
x′ = x + dx
y′ = y + dy
在屏幕上實現圖像的移動分為四個步驟:
⑴ 保存原圖像到緩沖區。
⑵ 擦除原圖像。
⑶ 計算平移后的新坐標。
⑷ 在新的坐標位置重新顯示原圖像。
其中,擦除原圖像的方法與圖形變換中擦除原圖形的方法一致,在實現中仍采用XOR異或方式畫圖擦除原圖像。對于新坐標值的計算還需要考慮邊界情況,不要在圖像平移后超出允許的屏幕范圍。此外,如果采用C函數getimage()和putimage()來保存和恢復圖像,則圖像的大小不能超過64K。
2.圖像顛倒
圖像顛倒是指把定義好的圖像區域上下翻轉地顯示在屏幕上。分析圖像顛倒的過程,可發現每行的圖像信息都保持不變,而只是改變了行的順序,將第一行與最后的第n行相互交換,第二行與第n - 1行交換……,依此類推,從而實現了圖像的顛倒。只需采用按行交換的方式,即可方便地修改緩沖區內容,實現圖像的顛倒。基本步驟如下:
(1) 用getimage()保存原圖像,并擦除原圖像。
(2) 計算圖像的高度,即行數height;計算圖像寬度width;計算保存一行圖像信息?
height = bottom - top + 1;
width = right - left + 1;
linebytes = (width + 7) / 8 * 4;
(3)利用行交換緩沖區linebuf在圖像內存緩沖區中進行信息交換,即把第一行與最末行交換,第2行與第n-1行交換……,依此類推,直至 全部交換完畢。
(4)把交換后的圖像緩沖區內容重新顯示在屏幕上。
3.圖像鏡像變換
鏡像變換是指將指定區域的圖像左右翻轉地顯示在屏幕。分析鏡像變換過程可以發現:每行圖像信息的處理方式是相同的,而且行順序不發生變化,只是每一行的像素信息按從左到右的順序進行了左右顛倒,從而實現了鏡像變換。因此,采用按行逐點變換的方式實現圖像的鏡像。?
首先,對于左上角為(left, top),右下角為(right, bottom)矩形區域圖像,給出其中任意點(x0, y0)鏡像變換后的新坐標(x′, y′)的坐標變換公式:
x′ = right - x0 + left
y′ = y0
根據以上公式,對各個像素點計算新坐標后,直接把它顯示在屏幕的相應位置上。
如果完全逐點地進行交換,處理一個像素點就要讀取一次像素值,從而降低了變換速度。由于像素點是順序存放在各個bit位上,每讀取一個字節就包含了8個像素點的信息,只需設置不同的位屏值bitmask,就可以獲得不同像素點的信息。因此采用按行逐字節變換的方式,每讀一次就進行8個像素點的變換,以提高變換速度。
將一矩形區域的圖像進行鏡像變換的基本步驟如下:
(1) 用getimage()把圖像保存到內存緩沖區,并擦除原圖像。
(2) 計算圖像高度,即行數高度height和寬度width;計算保存一行圖像信息占用的字節數linebytes。計算公式如下:
height = bottom - top + 1;
width = right - left + 1;
linebyte = (width + 7) / 8 *4;
(3) 對圖像進行鏡像。
(4)釋放內存圖像緩沖區。
4.圖像旋轉
圖像旋轉是指把定義的圖像繞某一點以逆時針或順時針方向旋轉一定的角度,通常是指繞圖像的中心以逆時針方向旋轉。
假設圖像的左上角為(left, top),右下角為(right, bottom),則圖像上任意點(x0, y0)繞其中心(xcenter, ycenter)逆時針旋轉angle角度后,新的坐標位置(x′, y′)的計算公式為:
xcenter = (right - left + 1) / 2 + left;
ycenter = (bottom - top + 1) / 2 + top;
x′ = (x0 - xcenter) cosθ - (y0 - ycenter) sinθ + xcenter;
y′ = (x0 - xcenter) sinθ + (y0 - ycenter) cosθ + ycenter;
與圖像的鏡像變換相類似,也采用按行逐點變換的方式實現圖像的旋轉,其步驟如下:
(1) 用getimage()把圖像保存到內存緩沖區,并擦除原圖像。
(2) 計算圖像高度height,寬度width,及保存一行圖像信息占用的字節數linebytes,計算公式與鏡像變換的計算公式相同。
(3) 對圖像逐行進行旋轉變換。
(4) 釋放內存圖像緩沖區。
值得指出的是,這種處理方法不夠。為此可以采用另一種方法:先在圖像變換緩沖區中處理完畢后,再將變換后的圖像一次顯示在屏幕上。這樣可以取得較好的顯示效果。

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

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

相關文章

E24- please install the following Perl modules before executing ./mysql_install_db

2019獨角獸企業重金招聘Python工程師標準>>> [roott-cet7 scripts]# ./mysql_install_db --basedir/usr/local/mysql/ --datadir/app/data/ --usermysql FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db: Data::Dumpe…

SpringMVC異常報406 (Not Acceptable)的解決辦法

使用SpsringMVC&#xff0c;使用restEasy調試&#xff0c;controller請求設置如下&#xff1a; Java代碼 RequestMapping(value"/list",methodRequestMethod.GET,producesMediaType.APPLICATION_JSON_VALUE) ResponseBody public List<EditTimeout> list()…

Diango博客--25.使用Coverage統計測試覆蓋率

文章目錄1. 前言2. 安裝 Coverage3. 簡單配置 Coverage4. 運行 Coverage5. 完善 Coverage 配置6. 生成 HTML 報告7. 完善單元測試1. 前言 我們完成了對 blog 應用和 comment 應用這兩個核心 app 的測試。現在我們想知道的是究竟測試效果怎么樣呢&#xff1f;測試充分嗎&#x…

面向對象語言的優點

1.一致的表達方法 從前面章節的講述中可以知道&#xff0c;面向對象開發基于不隨時間變化的、一致的表示方法。這種表示方法應該從問題域到OOA&#xff0c;從OOA到OOD&#xff0c;最后從OOD到面向對象編程(OOP)&#xff0c;始終穩定不變。 一致的表示方法&#xff1a; 既有利…

最好的英文詞典

辭典對于學外語的作用&#xff0c;怎么強調也不過分。經常接觸英語的人都知道&#xff0c;遇到生詞不可怕&#xff0c;可怕的是遇到認識的單詞&#xff0c;又不明白這句話什么意思。這個時候&#xff0c;辭典的作用就發揮出來了。 今天一位朋友問我一句英文的意思&#xff0c;…

oracle用戶創建及權限設置

權限&#xff1a; create session create table unlimited tablespace connect resource dba 例&#xff1a; #sqlplus /nolog SQL> conn / as sysdba; SQL>create user username identified by password SQL> grant dba to username; SQL> conn username/password…

Android動畫之逐幀動畫(FrameAnimation)詳解

今天我們就來學習逐幀動畫,廢話少說直接上效果圖如下: 幀動畫的實現方式有兩種&#xff1a; 一、在res/drawable文件夾下新建animation-list的XML實現幀動畫 1、首先在res/drawable文件夾下添加img00-img24共25張圖片 2、新建frame_anim.xml [html] view plaincopy <?xml v…

ajax-簡單參數方法實現陰影效果

注&#xff1a; 簡單參數 &#xff08;按照參數的數量和位置傳遞參數&#xff09; 使用時按照位置、數量傳遞 shadow.js函數//簡單參數實現方式/** slices:陰影* opacity:透明度* zIndex:層級* */jQuery.fn.shadow_simple function (slices,opacity,zIndex) { //獲取到每個…

第一二三范式的簡單理解

第一范式&#xff08;無重復的列&#xff09; 定義&#xff1a;數據庫表的每一列都是不可分割的原子數據項&#xff0c;而不能是集合&#xff0c;數組&#xff0c;記錄等非原子數據項。如果實體中的某個屬性有多個值時&#xff0c;必須拆分為不同的屬性 通俗解釋&#xff1a;一…

網絡爬蟲--1.通用爬蟲和聚焦爬蟲

文章目錄一.前言二.通用爬蟲1.工作原理2.通用爬蟲的局限性三.聚焦爬蟲一.前言 根據使用場景&#xff0c;網絡爬蟲可分為 通用爬蟲 和 聚焦爬蟲 兩種。 其中通用網絡爬蟲是捜索引擎抓取系統&#xff08;Baidu、Google、Yahoo等&#xff09;的重要組成部分。主要目的是將互聯網…

敏捷教練的工具箱

學習并不是簡簡單單的閱讀和瀏覽&#xff0c;而是一個積累的過程&#xff0c;一個通過持續的學習&#xff0c;對自己的知識體系不斷豐富、索引的過程。接下來我會從四個方面入手分享我的經驗。 高質量的信息源和高效的學習 Google是一個很好的工具&#xff0c;通過它&#x…

log4j教程

詳細的Log4j使用教程 轉載 2016年08月19日 14:44:49 5072 日志是應用軟件中不可缺少的部分&#xff0c;Apache的開源項目log4j是一個功能強大的日志組件,提供方便的日志記錄。在apache網站&#xff1a;jakarta.apache.org/log4j 可以免費下載到Log4j最新版本的軟件包。…

BC范式介紹

設關系模式R<U&#xff0c;F>∈1NF&#xff0c;如果對于R的每個函數依賴X→Y&#xff0c;若Y不屬于X&#xff0c;則X必含有候選碼&#xff0c;那么R∈BCNF。 即為&#xff1a;對于關系模式R&#xff0c;若 R為第一范式&#xff0c;且每個屬性都不部分依賴于候選鍵也不傳遞…

com.jhlabs:imaging:jar:01012005 所在倉庫+captcha驗證碼maven依賴

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 <repositories> <repository> <id>atlassian</id> <name>atlassian</name&g…

python 發送郵件的兩種方式【終極篇】

python 發送郵件的兩種方式【終極篇】 一&#xff0c;利用python自帶的庫 smtplib簡單高效 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header import smtplib from django.conf import settingsmail_hos…

網絡爬蟲--2.HTTP和HTTPS

文章目錄一.簡介二.HTTP的請求與響應三.客戶端HTTP請求1.格式2.請求方法四.常用的請求報頭1.Host (主機和端口號)2.Connection (鏈接類型)3.Upgrade-Insecure-Requests (升級為HTTPS請求)4. User-Agent (瀏覽器名稱)5. Accept (傳輸文件類型)6.Referer (頁面跳轉處)7.Accept-En…

解決win7的outlook打不開的問題

outlook打不開&#xff0c;一直顯示正在處理 解決方法&#xff1a; 1. 按住Ctrl,雙擊打開組件&#xff0c;會提示是否進入安全模式&#xff0c; 進入安全模式 2. 單擊Outlook中的文件-選項-加載項- 左下角的“COM加載項“ 旁邊的“轉到”&#xff0c;將所有加載項前面的勾都去掉…

IBM王陽:軟件是凝聚創新力的最佳平臺

導讀&#xff1a;在IBM全球副總裁兼IBM中國開發中心總經理王陽博士看來&#xff0c;IBM百年不衰的根本原因在于將創新力凝結成軟件然后進行合適的傳播&#xff0c;其間最重要的是成功打造出了一個吸引人才、培養研發人才并激發出人才創新力的環境和氛圍。而保持創新領導力的關鍵…

數據庫的規范化

在關系數據庫中&#xff0c;對關系模式的基本要求是滿足第一范式。 規范化程度過低的關系不一定能夠很好地描述現實世界 可能存在插入異常、刪除異常、修改復雜、數據冗余等問題 解決方法就是對其進行規范化&#xff0c;轉換成高級范式 一個低一級范式的關系模式&#xff0c;通…

Jquery 多行拖拽圖片排序 jq優化

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>jQuery圖片拖動排序代碼</title><style type"text/css">.item_container{position:relative;height:auto;overflow:hidden;} .item_content ul{li…