none
<急>圖片轉檔程式請教 RRS feed

  • 問題

  • 請教一下大大們!!

    我最近在做個圖檔文字辨識的專題

    但因為單獨圖片去做辨識抓取圖片的文字會造成許多雜訊及辨識不清等問題

    我想把圖片做個轉檔的動作

    想把RGB轉HSL

    讓圖檔上的自單獨抓出來

    請問一下用C#寫  程式該怎嚜寫呢?

    2010年9月29日 下午 05:50

所有回覆

    • 已提議為解答 黑夜之靈 2010年10月17日 上午 02:43
    2010年9月30日 上午 12:57
  • 請教一下,那段RGB轉HSL的程式要放再我程式裡的哪一段呢?

    我該怎嚜做呢?

    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    using System.IO;
    using System.Data;
    
    namespace myOCR
    {
    	/// <summary>
    	/// Description of MainForm.
    	/// </summary>
    	public partial class MainForm : Form
    	{
    		DataTable ds=new DataTable();//建立一個DataTable物件存放OCR後的資料
    		public MainForm()
    		{
    			//
    			// The InitializeComponent() call is required for Windows Forms designer support.
    			//
    			InitializeComponent();
    			
    			//
    			// TODO: Add constructor code after the InitializeComponent() call.
    			//
          //初始化DataGridView所需的頁面
    			DataColumn col_file=new DataColumn("File");  //設定欄位名稱
          DataColumn col_str = new DataColumn("String"); //設定欄位名稱
    			this.ds.Columns.Add(col_file); //將欄位加入DataTable中
          this.ds.Columns.Add(col_str);  //將欄位加入DataTable中
    			ocr_table.DataSource=ds;//將DataTable放入DataGridView這樣才會顯示資料
          ocr_table.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; //禁用排序
          ocr_table.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable; //禁用排序
          //初始化DataGridView結束
    		}
    
        //顯示進度列函數
    		public void ShowProgress(int progress, ref bool cancel)
    		{
          //進度列的值等於傳入的整數
    			procBar.Value=progress;
    		}
    
    		/*
    		 * OCR函數
         * 來源 : http://www.dotblogs.com.tw/chou/archive/2009/10/05/10909.aspx
    		 * 
    		 * */
    		private string OCR(string strFileName)
        {
          string strResult = string.Empty;
    
          // 宣告 MODI.Document 物件 modiDocument,並且實例化
          MODI.Document modiDocument = new MODI.Document();
          
    			//procBar
    			modiDocument.OnOCRProgress += new MODI._IDocumentEvents_OnOCRProgressEventHandler(this.ShowProgress);
    			
          // MODI.Document 創建
          modiDocument.Create(strFileName);
    
          // 宣告 MODI.Image 物件 modiImage,其內容值來自 MODI.Document 物件 modiDocument
          MODI.Image modiImage = (MODI.Image)modiDocument.Images[0];
    
          // OCR Method(Language, WithAutoRotation, WithStraightenImage)
          //modiImage.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);//原本語言是英文
          modiImage.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_TRADITIONAL, true, true);//辨識的語言改為中文
          
    
          // 組合 OCR 辨識後的 Word
          foreach (MODI.Word WordItem in modiImage.Layout.Words)
          {
            strResult += WordItem.Text;
          }
          
          //設定procBar
          bool b=false;
          this.ShowProgress(100,ref b);
          modiDocument.Close(false);
    
          // 回傳辨識結果
          return strResult;
        }
    		
        //Scan按鈕按下時的動作
    		void Button1Click(object sender, EventArgs e)
    		{
          //建立一個資料夾選擇物件,並顯示
    			FolderBrowserDialog myfolder=new FolderBrowserDialog();
    			myfolder.ShowDialog();
    
          //判斷是否有選擇資料夾,如果有就進行動作
    			if(myfolder.SelectedPath.Length>0){
            //取得目錄內的所有檔案
    				DirectoryInfo di = new DirectoryInfo(myfolder.SelectedPath);
    				FileInfo[] files = di.GetFiles();
    				//依序掃描檔案
    				for(int n=0;n<files.Length;n++){
    					string ocr_str=""; //用來暫存OCR結果的變數
    					string ocr_file=files[n].FullName; //目前OCR的圖片檔完整路徑
    
              if (files[n].Name.Substring(0, 8) != "captured")//判斷前八個字是否為captured
              {
                continue;
              }
    
    					myfile.Text="("+(n+1).ToString()+"/"+files.Length.ToString()+") "+ocr_file; //將目前掃描的檔案名稱輸出到介面上
    					ocr_str=this.OCR(ocr_file); //進行OCR,傳入完整路徑
    				
    					//將結果寫入DataTable
    					DataRow row=this.ds.NewRow();
              row["File"] = files[n].FullName;  //僅檔名
    					row["String"]=ocr_str;     //OCR辨識出來的字
    					this.ds.Rows.Add(row);
    				}			
    			}
    		}
    
        //搜尋框內容有變動時執行的動作
        private void search_box_TextChanged(object sender, EventArgs e)
        {
          string key=search_box.Text; //取得欲搜尋的文字
    
          if (key.Length == 0)//判斷是否有輸入文字
          {
            search_box.BackColor = Color.White; //無,將搜尋框底色改為白
          }else{
            //有,進行搜尋
            bool rt = search_datatable(search_box.Text);  //使用自訂的搜尋函數,傳入字串
            if(rt){
              search_box.BackColor = Color.White;//將搜尋框底色改為白
            }else{
              search_box.BackColor = Color.FromArgb(255, 200, 200);//將搜尋框底色改為紅
            }
          }
        }
    
        //自訂的搜尋函數
        bool search_datatable(string key_str) {
          //每次的搜尋前都先清除所有的底色
          for (int n = 0; n < this.ds.Rows.Count; n++) {
            ocr_table.Rows[n].DefaultCellStyle.BackColor = Color.White;
          }
    
          //進行搜尋
          int search_count = 0;  //繼錄找到幾次的變數
          for (int n = 0; n < this.ds.Rows.Count;n++ ){
            string ocr_str = this.ds.Rows[n][1].ToString(); //從DataTabel中取得第二個欄位內容
            if (ocr_str.IndexOf(key_str)>-1) { //用indexOf函數來判斷字串A是否存在字串B中
              ocr_table.Rows[n].DefaultCellStyle.BackColor = Color.FromArgb(200, 200, 255);  //有找到就把該列改為藍色
              search_count++; //計數器加一
            }
          }
          //回傳真假值
          // true:有找到  false:沒找到
          if (search_count > 0){//用計數器是否為0判斷
            return true;
          }else{
            return false;
          }
        }
    
        //取得選取的Row所指的檔案並顯示在picbox中
        private void ocr_table_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
          int select = ocr_table.SelectedCells[0].RowIndex;
          picbox.ImageLocation = this.ds.Rows[select][0].ToString();
        }
    	}
    }
    
    2010年9月30日 上午 05:26
  • Hi!

    在你做 modiDocument.Create(strFileName); 之前

    strFileName 是一個圖片檔案,請您先讀取 strFileName 圖片檔案做影像處理,然後儲存成 temp 檔案,再帶入 modiDocument.Create( temp 檔案檔名);  把您做好影像處理的 Temp 圖片檔案做 OCR 處理


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年9月30日 上午 05:42
    版主
  • MODI 已經被 Office 2010 宣告死刑,用之前請確認程式使用期限。

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年9月30日 下午 02:11
  • 版主小歐你好!!

    還是不怎嚜懂您的意思餒!!

    您的意思是 我先把轉檔程式寫盡我得主程式媽?

    那是話  我該怎嚜做呢?

    要怎嚜用我不怎嚜懂!!  抱歉不懂意思 請幫幫說明清楚一點唷!!   謝謝您:))

    2010年9月30日 下午 04:24
  • to 心冷熱情熄 大大

    我想請問一下, 您說的 MODI 已經被 Office 2010 宣告死刑

    意思是 Office 2010 中沒有 Microsoft Office Document Imaging 嗎??

    如果是, 原因是?? 太爛嗎??

    2010年10月4日 下午 06:09
  • http://tlcheng.wordpress.com/2010/06/12/office-2010microsoft-office-document-imaging-modi-%e6%9b%bf%e4%bb%a3%e6%96%b9%e6%a1%88/
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年10月5日 上午 03:59