1. 程式人生 > >【solr基礎教程之二】索引

【solr基礎教程之二】索引

一、向Solr提交索引的方式

1、使用post.jar進行索引 (1)建立文件xml檔案
<add>
    <doc>
        <field name="id">test4</field>
        <field name="title">testagain</field>
        <field name="url">http://www.163.com</field>
    </doc>
</add>

(2)使用java -jar post.jar
[[email protected]
exampledocs]# java -Durl=http://ip:8080/solr/update -jar post.jar test.xml SimplePostTool version 1.5 Posting files to base url http://ip:8080/solr/update using content-type application/xml.. POSTing file test.xml 1 files indexed. COMMITting Solr index changes to http://localhost:8080/solr/update.. Time spent: 0:00:00.135

(3)檢視post.jar的使用方法
[[email protected] exampledocs]# java -jar post.jar --help
SimplePostTool version 1.5
Usage: java [SystemProperties] -jar post.jar [-h|-] [<file|folder|url|arg> [<file|folder|url|arg>...]]
Supported System Properties and their defaults:
  -Ddata=files|web|args|stdin (default=files)
  -Dtype=<content-type> (default=application/xml)
  -Durl=<solr-update-url> (default=http://localhost:8983/solr/update)
  -Dauto=yes|no (default=no)
  -Drecursive=yes|no|<depth> (default=0)
  -Ddelay=<seconds> (default=0 for files, 10 for web)
  -Dfiletypes=<type>[,<type>,...] (default=xml,json,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log)
  -Dparams="<key>=<value>[&<key>=<value>...]" (values must be URL-encoded)
  -Dcommit=yes|no (default=yes)
  -Doptimize=yes|no (default=no)
  -Dout=yes|no (default=no)
This is a simple command line tool for POSTing raw data to a Solr port. Data can be read from files specified as commandline args, URLs specified as args, as raw commandline arg strings or via STDIN.
Examples:
  java -jar post.jar *.xml
  java -Ddata=args -jar post.jar '<delete><id>42</id></delete>'
  java -Ddata=stdin -jar post.jar < hd.xml
  java -Ddata=web -jar post.jar http://example.com/
  java -Dtype=text/csv -jar post.jar *.csv
  java -Dtype=application/json -jar post.jar *.json
  java -Durl=http://localhost:8983/solr/update/extract -Dparams=literal.id=a -Dtype=application/pdf -jar post.jar a.pdf
  java -Dauto -jar post.jar *
  java -Dauto -Drecursive -jar post.jar afolder
  java -Dauto -Dfiletypes=ppt,html -jar post.jar afolder
The options controlled by System Properties include the Solr URL to POST to, the Content-Type of the data, whether a commit or optimize should be executed, and whether the response should be written to STDOUT. If auto=yes the tool will try to set type and url automatically from file name. When posting rich documents the file name will be propagated as "resource.name" and also used as "literal.id". You may override these or any other request parameter
through the -Dparams property. To do a commit only, use "-" as argument. The web mode is a simple crawler following links within domain, default delay=10s.

(4)預設情況下,使用xml檔案作資料來源,若使用其它方式,如下
java -Dtype=application/json -jar post.jar *.json
2、使用管理介面的Document頁面進行提交

3、使用SolrJ進行索引

(1)使用SolrJ進行簡單索引

package org.ljh.test.solr;

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;

public class BasicSolrJIndexDemo {

	public static void main(String[] args) throws Exception {
		
		/*
		 * 注意,雖然使用地址http://ip:8080/solr/#/collection1來訪問頁面,但應該通過http:/
		 * /ip:8080/solr/collection1來進行文件的提交
		 */		
		String serverUrl = (args != null && args.length > 0) ? args[0]
				: "http://localhost:8080/solr/collection1";
		
		SolrServer solrServer = new HttpSolrServer(serverUrl);
		
		SolrInputDocument doc1 = new SolrInputDocument();
		doc1.setField("id", "solrJTest3");
		doc1.setField("url", "http://www.163.com/");
		solrServer.add(doc1);
		
		SolrInputDocument doc2 = new SolrInputDocument();
		doc2.setField("id", "solrJTest4");
		doc2.setField("url", "http://www.sina.com/");
		solrServer.add(doc2);
		
		solrServer.commit(true,true);
		
	}
	
	

}

(2)使用SolrJ進行簡單查詢
package org.ljh.test.solr;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;

public class BasicSolrJSearchDemo {

	public static void main(String[] args) throws Exception {
		
		String serverUrl = (args != null && args.length > 0) ? args[0]
				: "http://localhost:8080/solr/collection1";
		SolrServer solrServer = new HttpSolrServer(serverUrl);
		
		//讀取輸入引數作為查詢關鍵字,若無關鍵字,則查詢全部內容。
		String queryString = (args != null && args.length > 1) ? args[1] : "url:163";
		SolrQuery solrQuery = new SolrQuery(queryString);
		solrQuery.setRows(5);
		QueryResponse resp = solrServer.query(solrQuery);
		SolrDocumentList hits = resp.getResults();
		
		for(SolrDocument doc : hits ){
			System.out.println(doc.getFieldValue("id").toString() + " : " + doc.getFieldValue("url"));
		}
		
	}

}

4、使用第三方工具

(1)DIH

(2)ExtractingRequestHandler, aka Solr Cell

(3)Nutch

二、schema.xml : 定義文件的格式

schema.xml定義了被索引的文件應該包括哪些Field、這個Filed的型別,以及其它相關資訊。

1、示例

Nutch為Solr提供的schema.xml如下:

<?xml version="1.0" encoding="UTF-8" ?>
   
<schema name="nutch" version="1.5">
    <types>
        <fieldType name="string" class="solr.StrField" sortMissingLast="true"
            omitNorms="true"/> 
        <fieldType name="long" class="solr.TrieLongField" precisionStep="0"
            omitNorms="true" positionIncrementGap="0"/>
        <fieldType name="float" class="solr.TrieFloatField" precisionStep="0"
            omitNorms="true" positionIncrementGap="0"/>
        <fieldType name="date" class="solr.TrieDateField" precisionStep="0"
            omitNorms="true" positionIncrementGap="0"/>

        <fieldType name="text" class="solr.TextField"
            positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.StopFilterFactory"
                    ignoreCase="true" words="stopwords.txt"/>
                <filter class="solr.WordDelimiterFilterFactory"
                    generateWordParts="1" generateNumberParts="1"
                    catenateWords="1" catenateNumbers="1" catenateAll="0"
                    splitOnCaseChange="1"/>
                <filter class="solr.LowerCaseFilterFactory"/>

                <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

            </analyzer>
        </fieldType>
        <fieldType name="url" class="solr.TextField"
            positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.StandardTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.WordDelimiterFilterFactory"
                    generateWordParts="1" generateNumberParts="1"/>
            </analyzer>
        </fieldType>
    </types>
    <fields>
        <field name="id" type="string" stored="true" indexed="true"/>

        <!-- core fields -->
        <field name="batchId" type="string" stored="true" indexed="false"/>
        <field name="digest" type="string" stored="true" indexed="false"/>
        <field name="boost" type="float" stored="true" indexed="false"/>

        <!-- fields for index-basic plugin -->
        <field name="host" type="url" stored="false" indexed="true"/>
        <field name="url" type="url" stored="true" indexed="true"
            required="true"/>
        <field name="content" type="text" stored="false" indexed="true"/>
        <field name="title" type="text" stored="true" indexed="true"/>
        <field name="cache" type="string" stored="true" indexed="false"/>
        <field name="tstamp" type="date" stored="true" indexed="false"/>

        <field name="_version_" type="long" indexed="true" stored="true"/>
        <!-- fields for index-anchor plugin -->
        <field name="anchor" type="string" stored="true" indexed="true"
            multiValued="true"/>

        <!-- fields for index-more plugin -->
        <field name="type" type="string" stored="true" indexed="true"
            multiValued="true"/>
        <field name="contentLength" type="long" stored="true"
            indexed="false"/>
        <field name="lastModified" type="date" stored="true"
            indexed="false"/>
        <field name="date" type="date" stored="true" indexed="true"/>

        <!-- fields for languageidentifier plugin -->
        <field name="lang" type="string" stored="true" indexed="true"/>

        <!-- fields for subcollection plugin -->
        <field name="subcollection" type="string" stored="true"
            indexed="true" multiValued="true"/>

        <!-- fields for feed plugin (tag is also used by microformats-reltag)-->
        <field name="author" type="string" stored="true" indexed="true"/>
        <field name="tag" type="string" stored="true" indexed="true" multiValued="true"/>
        <field name="feed" type="string" stored="true" indexed="true"/>
        <field name="publishedDate" type="date" stored="true"
            indexed="true"/>
        <field name="updatedDate" type="date" stored="true"
            indexed="true"/>

        <!-- fields for creativecommons plugin -->
        <field name="cc" type="string" stored="true" indexed="true"
            multiValued="true"/>
            
        <!-- fields for tld plugin -->    
        <field name="tld" type="string" stored="false" indexed="false"/>
    </fields>
    <uniqueKey>id</uniqueKey>
    <defaultSearchField>content</defaultSearchField>
    <solrQueryParser defaultOperator="OR"/>
</schema>
以上文件包括5個部分:

(1)FiledType:域的型別
(2)Field:哪些域被索引、儲存等,以及這個域是什麼型別。
(3)uniqueKey:哪個域作為id,即文章的唯一標識。
(4)defaultSearchField:預設的搜尋域
(5)solrQueryParser:OR,即使用OR來構建Query。

2、Field元素

一個或者多個Field元素組成一個Fields元素,Nutch中使用了此結構,但solr的example中沒有Fileds元素,而是直接將Fields元素作為schma元素的下一級元素。FieldType與此類似。

一個Filed的示例如下:

<field name="tag" type="string" stored="true" indexed="true" multiValued="true"/>
Filed的幾個基本屬性如下:

(1)name屬性

域的名稱

(2)type屬性

域的型別

(3)stored屬性

是否儲存這個域,只有儲存了,才能在搜尋結果中檢視這個域的完整內容。

(4)indexed屬性

是否索引這個域,索引了就可以用作搜尋域,除此之外,即使你不需要對這個域進行搜尋,但需要排序、分組、查詢提示、facet、function queries等,也需要對這個域進行索引。

例如,查詢一本書時,一般不會通過銷售的數量進行搜尋,但會根據銷售的數量進行排序。

In addition to enabling searching, you will also need to mark your field as indexed if you need to sort, facet, group by, provide query suggestions for, or execute function queries on values within a field.

(5)multiValued屬性

若一個域中允許存在多個值,則設定multiValued為true。

 <field name="tag" type="string" stored="true" indexed="true" multiValued="true"/>
此時,在被索引的文件中,可以使用多個具有相同name值的Filed。
<add>
	<doc>
	............
		<Field name="tag">lucene</Field>
		<Field name="tag">solr</Field>
	</doc>
</add>

若使用SolrJ,則使用addField方法代替setField方法。
doc.addField("tag","lucene");
doc.addField("tag","solr");

(6)required屬性

Solr使用required屬性來指定每個提交的文件都必須提供這個域。注意uniqueKey元素中指定的域隱含了required=true。

 <field name="url" type="url" stored="true" indexed="true" required="true"/>


3、dynamicField元素

<dynamicField name="*_ti" type="tint" indexed="true" stored="true"/>

(1)一般而言,不要使用動態域,除非是以下三種情況 Dynamic fields help address common problems that occur when building search applications, including
■ Modeling documents with many fields
■ Supporting documents from diverse sources
■ Adding new document sources
具體可見solr in action的5.3.3節。

4、copyField

copyFiled用於以下2種情形

copy fields support two use cases that are common in most search applications:
■ Populate a single catch-all field with the contents of multiple fields.
■ Apply different text analysis to the same field content to create a new searchable field.

(1)將多個域複製到一個單一的域,以方便搜尋等。如:

<copyField source="title" dest="text"/>
<copyField source="author" dest="text"/>
<copyField source="description" dest="text"/>
<copyField source="keywords" dest="text"/>
<copyField source="content" dest="text"/>
<copyField source="content_type" dest="text"/>
<copyField source="resourcename" dest="text"/>
<copyField source="url" dest="text"/>

則搜尋時只對text進行搜尋即可。

(2)對同一個域進行多次不同的分析處理,如:

<field name="text"
type="stemmed_text"
indexed="true"
stored="true"/>
<field name="auto_suggest"
type="unstemmed_text"
indexed="true"
stored="false"
multiValued="true"/>
...
<copyField source="text" dest="auto_suggest" />
在上述例子中,若對一個域進行索引,則將詞彙詞幹化,但在搜尋提示時,就不對詞彙進行詞幹化。

5、FieldType元素

(1)FiedlType定義了Filed的型別,它將在Filed中的type屬性中被引用。

(2)Solr內建的FiledType有以下型別:


(3)有2大類FieldType:

一類是要對其進行分析後再索引的非結構化資料,如文章 的正文等,如StrField,TrieLongField等。

另一類是不需要對其進行分析,而直接索引的的結構批資料,如url,id,人名等,主要是TextField。

(4)在schema.xml中看到 的solr.*代表的是org.apache.solr.schema.*,如

        <fieldType name="string" class="solr.StrField" sortMissingLast="true"  omitNorms="true"/> 
表示型別為org.apache.solr.schema.StrField。

(5)StringField

StringField中的內容不應該被分析,它包含的是結構化資料。

StringField,用類org.apache.solr.schema.StrField表示。

(6)DateField

DateField一般使用TrieDateField來表示,其中Trie資料可以方便的進行範圍搜尋。

DateField的預設格式:In general, Solr expects your dates to be in the ISO-8601 Date/Time format (yyyy-MMddTHH:mm:ssZ); the date in our tweet (2012-05-22T09:30:22Z) breaks down to
yyyy = 2012
MM = 05
dd = 22
HH = 09 (24-hr clock)
mm = 30
ss = 22
Z = UTC Timezone (Z is for Zulu)

可以通過以下方式擷取其內容:

<field name="timestamp">2012-05022T09:30:00Z/HOUR</fileld>

表示擷取到小時的粒度,即其值為:2012-05022T09:00:00Z

(7)NumericField

有多個實現型別,如TrieDoubleField,TrieFloatField,TrieIntField,TrieLongField等。

(8)type有多個屬性,主要包括

sortMissingFirst:當根據使用這個型別的域進行排序時,若這個域沒有值,則在排序時,將此文件放在最前面。

sortMissingLast::當根據使用這個型別的域進行排序時,若這個域沒有值,則在排序時,將此文件放在最後面。

precisionStep:

positionIncrementGap:見solr in action 5.4.4節。

6、UniqueKey元素

(1)Solr使用<uniqueKey>元素來標識一個唯一識別符號,類似於一個數據庫表的主鍵。如:

 <uniqueKey>id</uniqueKey>
必須選擇一個Field作為一個uniqueKey。使用uniqueKey標識的欄位,每一個進行索引的文件都必須提供。

(2)Solr不要求為每個文件提供一個唯一識別符號,但建議為每個文件都提供一個唯一識別符號,以用於避免重複等。

(3)當向solr提交一個文件時,若此文件的id已經存在,則此文件會覆蓋原有的文件。

(4)如果solr被部署在多個伺服器中,則必須提供uniqueKey。

(5)使用基本類似來作為uniqueKey,不要使用複雜型別。  One thing to note is that it’s best to use a primitive field type, such as string or long, for the field you indicate as being the <uniqueKey/> as that ensures Solr doesn’t make
any changes to the value during indexing

三、SolrConfig.xml中與索引相關的內容

以下為一個示例

<!--  The default high-performance update handler  -->
<updateHandler class="solr.DirectUpdateHandler2">
<!--
 Enables a transaction log, used for real-time get, durability, and
         and solr cloud replica recovery.  The log can grow as big as
         uncommitted changes to the index, so use of a hard autoCommit
         is recommended (see below).
         "dir" - the target directory for transaction logs, defaults to the
                solr data directory.  
-->
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
<!--
 AutoCommit

         Perform a hard commit automatically under certain conditions.
         Instead of enabling autoCommit, consider using "commitWithin"
         when adding documents. 

         http://wiki.apache.org/solr/UpdateXmlMessages

         maxDocs - Maximum number of documents to add since the last
                   commit before automatically triggering a new commit.

         maxTime - Maximum amount of time in ms that is allowed to pass
                   since a document was added before automatically
                   triggering a new commit. 
         openSearcher - if false, the commit causes recent index changes
           to be flushed to stable storage, but does not cause a new
           searcher to be opened to make those changes visible.

         If the updateLog is enabled, then it's highly recommended to
         have some sort of hard autoCommit to limit the log size.
      
-->
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<!--
 softAutoCommit is like autoCommit except it causes a
         'soft' commit which only ensures that changes are visible
         but does not ensure that data is synced to disk.  This is
         faster and more near-realtime friendly than a hard commit.
      
-->
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
</autoSoftCommit>
<!--
 Update Related Event Listeners
         
         Various IndexWriter related events can trigger Listeners to
         take actions.

         postCommit - fired after every commit or optimize command
         postOptimize - fired after every optimize command
      
-->
<!--
 The RunExecutableListener executes an external command from a
         hook such as postCommit or postOptimize.
         
         exe - the name of the executable to run
         dir - dir to use as the current working directory. (default=".")
         wait - the calling thread waits until the executable returns. 
                (default="true")
         args - the arguments to pass to the program.  (default is none)
         env - environment variables to set.  (default is none)
      
-->
<!--
 This example shows how RunExecutableListener could be used
         with the script based replication...
         http://wiki.apache.org/solr/CollectionDistribution
      
-->
<!--

       <listener event="postCommit" class="solr.RunExecutableListener">
         <str name="exe">solr/bin/snapshooter</str>
         <str name="dir">.</str>
         <bool name="wait">true</bool>
         <arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
         <arr name="env"> <str>MYVAR=val1</str> </arr>
       </listener>
      
-->
</updateHandler>


相關推薦

solr基礎教程索引

一、向Solr提交索引的方式 1、使用post.jar進行索引 (1)建立文件xml檔案 <add> <doc> <field name="id">test4</field> <

Lucene4.8教程索引

文件路徑 位置 存在 this nth 創建索引 exe 搜索 最簡 一、基礎內容 0、官方文檔說明 (1)org.apache.lucene.index provides two primary classes: IndexWriter, whic

Nutch基礎教程Nutch的2種執行模式:local及deploy

mapred nap ont nal servlet miss mos ant issue 在對nutch源碼執行ant runtime後,會創建一個runtime的文件夾。在runtime文件夾下有deploy和local 2個文件夾。 [[email 

OpenCV入門教程 一覽眾山小:OpenCV 2.4.8 or OpenCV 2.4.9元件結構全解析

毛星雲,網路ID「淺墨」,90後,熱愛遊戲開發、遊戲引擎、計算機圖形、實時渲染等技術,就職於騰訊互娛。 微軟最有價值專家 著作《Windows遊戲程式設計之從零開始》、《OpenCV3程式設計入門》 碩士就讀於南京航空航天大學航天學院(2013級碩士研究生),已於2016年三月畢業。本科

Unity基礎知識支援iOS架構 armv6 armv7 armv7s arm64

釋出一個unity遊戲到iOS上,需要匯出XCode工程,編譯釋出,但是一個同樣的程式,在android上只有20M,在iOS上就60幾M了,一個跟android包會壓縮有關,另外就是因為指令集了。 目前ios的指令集有以下幾種: armv6 iPhone iPh

solr基礎教程之中的一個Solr相關知識點串講

struct 詞匯 ont types 映射 details 必備 功能 提交 Solr是Apache Lucene的一個子項目。Lucene為全文搜索功能提供了完備的API。但它僅僅作為一個API庫存在。而不能直接用於搜索。因此,Solr基

solr基礎教程之一Solr相關知識點串講

Solr是Apache Lucene的一個子專案。Lucene為全文搜尋功能提供了完備的API,但它只作為一個API庫存在,而不能直接用於搜尋。因此,Solr基於Lucene構建了一個完整的搜尋引擎,它可以為搜尋引擎新增文件,對文件內容進行分析,併為使用者提供搜尋功能,在此基礎上提供了一個擴充套件功能,如

OpenCV人臉識別入門教程人臉檢測

本篇文章主要介紹瞭如何使用OpenCV實現人臉檢測。本文不具體講解人臉檢測的原理,直接使用OpenCV實現。 OpenCV版本:2.4.10;VS開發版本:VS2012。 一、OpenCV人臉檢測 要實現人臉識別功能,首先要進行人臉檢測,判斷出圖片中人臉的位置,才能進行

Nutch2.2.1基礎教程1nutch相關異常

1、在任務一開始執行,注入Url時即出現以下錯誤。 InjectorJob: Injecting urlDir: urls  InjectorJob: Using class org.apache.gora.hbase.store.HBaseStore as the Go

Solr基礎教程solrconfig.xml(三)

配置文件 multi listener 了無 files content esc lte 存儲 前面介紹過schema.xml的一些配置信息,本章介紹solrconfig.xml的配置,以及怎樣安裝smartcn分詞器和IK分詞器,並介紹主要的查詢語法。

Docker系列教程如何構建Dockerfile

在上一篇文章中,我們講述了 Dockerfile 的組成以及指令的編寫過程,在本篇文章中詳細講解如何構建 Dockerfile 。 Dockerfile常用的指令 那麼在講如何構建 Dockerfile 之前,我們回顧一下上一篇的編寫過程:

Docker系列教程如何將自制的漏洞環境打包成映象進行共享

我在之前的文章中只是說過,利用 Dockerfile 去拉去映象,而這些映象的拉取都是從 Docker Hub 上拉取下來,而現在我有個想法,我製作好了一個漏洞環境整合的映象,我又該如何進行開源共享,提供給別人使用呢?這就是我們今天的主題了。 首先我們得準備一個 Docker Hub 的帳號, Docker

OpenCV入門教程線性鄰域濾波專場:方框濾波、均值濾波與高斯濾波

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Docker系列教程Dockerfile入門

在上一篇的文章中,我們把 Docker 容器的工作流程剖析的十分清楚了,我們大體可以知道 Docker 元件協作執行容器可以分為以下幾個過程: Docker 客戶端執行 docker run 命令 Dockerdaemon

Docker系列教程Docker容器是如何工作的

在上一篇的文章中,我給大家主要介紹了一下 Docker 環境的搭建,簡單的講解了一下 Docker 架構,以及用 Docker 命令簡單演示了一下如何拉去一個 images 映象。本篇我們將剖析一下 Docker&nbs

OpenCV入門教程 非線性濾波專場 中值濾波 雙邊濾波

                正如我們上一篇文章中講到的,線性濾波可以實現很多種不同的影象變換。然而非線性濾波,如中值濾波器和雙邊濾波器,有時可以達到更好的實現效果。鄰域運算元的其他一些例子還有對二值影象進行操作的形態學運算元,用於計算距離變換和尋找連通量的半全域性運算元。 先上一張截圖:一、理論與概念講解

OpenCV入門教程線性鄰域濾波專場 方框濾波 均值濾波與高斯濾波

本系列文章由@淺墨_毛星雲 出品,轉載請註明出處。 寫作當前博文時配套使用的OpenCV版本: 2.4.8本篇文章中,我們一起仔細探討了OpenCV影象處理技術中比較熱門的影象濾波操作。影象濾波系列文章淺墨準備花兩次更新的時間來講,此為上篇,為大家剖析了“方框濾波“,”均值濾波“和”高斯濾波“三種常見線性鄰域

OpenCV入門教程 影象的載入,顯示和輸出 一站式完全解析

毛星雲,網路ID「淺墨」,90後,熱愛遊戲開發、遊戲引擎、計算機圖形、實時渲染等技術,就職於騰訊互娛。 微軟最有價值專家 著作《Windows遊戲程式設計之從零開始》、《OpenCV3程式設計入門》 碩士就讀於南京航空航天大學航天學院(2013級碩士研究生),已於2016年三月畢業。本科

OpenCV入門教程 ROI區域影象疊加&初級影象混合 全剖析

本系列文章由@淺墨_毛星雲 出品,轉載請註明出處。 寫作當前博文時配套使用的OpenCV版本: 2.4.8在這篇文章裡,我們一起學習了在OpenCV中如何定義感興趣區域ROI,如何使用addWeighted函式進行影象混合操作,以及將ROI和addWeighted函式結合起來

python 教程_python 基礎教程詳解

Lesson 1 準備好學習Python的環境下載的地址是:www.python.org為了大家的方便,我在校內作了copy:http://10.1.204.2/tool/compiler&IDE/Python-2.3.2-1.exelinux版本的我就不說了,因為如果你能夠使用linux並安裝好說明