ClickHouse(十八):Clickhouse Integration系列表引擎

?

?進入正文前,感謝寶子們訂閱專題、點贊、評論、收藏!關注IT貧道,獲取高質量博客內容!

🏡個人主頁:含各種IT體系技術,IT貧道_Apache Doris,大數據OLAP體系技術棧,Kerberos安全認證-CSDN博客

📌訂閱:擁抱獨家專題,你的訂閱將點燃我的創作熱情!

👍點贊:贊同優秀創作,你的點贊是對我創作最大的認可!

?? 收藏:收藏原創博文,讓我們一起打造IT界的榮耀與輝煌!

??評論:留下心聲墨跡,你的評論將是我努力改進的方向!


目錄

1.?HDFS

1.1 語法

1.2 其他配置

1.3 示例

??????????????2.?MySQL

2.1 語法

2.2 示例

2.3 測試 replace_query??

2.4 測試 on_duplicate_clause

??????????????3.?Kafka

3.1 語法

3.2 示例

3.3 示例


ClickHouse提供了許多與外部系統集成的方法,包括一些表引擎。這些表引擎與其他類型的表引擎類似,可以用于將外部數據導入到ClickHouse中,或者在ClickHouse中直接操作外部數據源。

???????1.?HDFS

HDFS引擎支持ClickHouse 直接讀取HDFS中特定格式的數據文件,目前文件格式支持Json,Csv文件等,ClickHouse通過HDFS引擎建立的表,不會在ClickHouse中產生數據,讀取的是HDFS中的數據,將HDFS中的數據映射成ClickHouse中的一張表,這樣就可以使用SQL操作HDFS中的數據。

ClickHouse并不能夠刪除HDFS上的數據,當我們在ClickHouse客戶端中刪除了對應的表,只是刪除了表結構,HDFS上的文件并沒有被刪除,這一點跟Hive的外部表十分相似。

1.1 語法

ENGINE = HDFS(URI, format)

注意:URI是HDFS文件路徑,format指定文件格式。HDFS文件路徑中文件為多個時,可以指定成some_file_?,或者當數據映射的是HDFS多個文件夾下數據時,可以指定somepath/* 來指定URI

1.2 其他配置

由于HDFS配置了HA 模式,有集群名稱,所以URI使用mycluster HDFS集群名稱時,ClickHouse不識別,這時需要做以下配置:

  1. 將hadoop路徑下$HADOOP_HOME/etc/hadoop下的hdfs-site.xml文件復制到/etc/clickhouse-server目錄下。
  2. 修改/etc/init.d/clickhouse-server 文件,加入一行 “export LIBHDFS3_CONF=/etc/clickhouse-server/hdfs-site.xml”
  3. 重啟ClickHouse-server 服務

serveice clickhouse-server restart

當然,這里也可以不做以上配置,在寫HDFS URI時,直接寫成對應的節點+端口即可。

1.3 示例

#在HDFS路徑 hdfs://mycluster/ch/路徑下,創建多個csv文件,寫入一些數據c1.csv文件內容:1,張三,192,李四,20c2.csv文件內容:3,王五,214,馬六,22#創建表 t_hdfs,使用HDFS引擎node1 :) create table t_hdfs(id UInt8,name String,age UInt8) engine = HDFS('hdfs://mycluster/ch/*.csv','CSV')#查詢表 t_hdfs中的數據node1 :) select * from t_hdfs;┌─id─┬─name─┬─age─┐│ ?3 ?│ 王五 ?│ ?21 ││ ?4 ?│ 馬六 ?│ ?22 │└────┴──────┴─────┘┌─id─┬─name─┬─age─┐│ ?1 ?│ 張三 ?│ ?19 ││ ?2 ?│ 李四 ?│ ?20 │└────┴──────┴─────┘注意:這里表t_hdfs不會在clickhouse對應的節點路徑下創建數據目錄,同時這種表映射的是HDFS路徑中的csv文件,不能插入數據,t_hdfs是只讀表。#創建表 t_hdfs2 文件 ,使用HDFS引擎node1 :)?create table t_hdfs2(id UInt8,name String,age UInt8) engine = HDFS('hdfs://mycluster/chdata','CSV');#向表 t_hdfs2中寫入數據node1 :) insert into t_hdfs2 values(5,'田七',23),(6,'趙八',24);#查詢表t_hdfs2中的數據node1 :) select * from t_hdfs2;┌─id─┬─name─┬─age─┐│ ?5 ?│ 田七??│ ?23 ││ ?6 ?│??趙八 │ ?24 │└────┴──────┴─────┘注意:t_hdfs2表沒有直接映射已經存在的HDFS文件,這種表允許查詢和插入數據。

??????????????2.?MySQL

ClickHouse MySQL數據庫引擎可以將MySQL某個庫下的表映射到ClickHouse中,使用ClickHouse對數據進行操作。ClickHouse同樣支持MySQL表引擎,即映射一張MySQL中的表到ClickHouse中,使用ClickHouse進行數據操作,與MySQL數據庫引擎一樣,這里映射的表只能做查詢和插入操作,不支持刪除和更新操作。

2.1 語法

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster](name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],...) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']);
  • 以上語法的解釋如下:
  1. host:port - MySQL服務器名稱和端口
  2. database - MySQL 數據庫。
  3. table - 映射的MySQL中的表
  4. user - 登錄mysql的用戶名
  5. password - 登錄mysql的密碼
  6. replace_query??- 將INSERT INTO 查詢是否替換為 REPLACE INTO 的標志,默認為0,不替換。當設置為1時,所有的insert into 語句更改為 replace into 語句。當插入的數據有重復主鍵數據時,此值為0默認報錯,此值為1時,主鍵相同這條數據,默認替換成新插入的數據。
  7. on_duplicate_clause?- 默認不使用。當插入數據主鍵相同時,可以指定只更新某列的數據為新插入的數據,對應于on duplicate key 后面的語句,其他的值保持不變,需要replace_query 設置為0。

2.2 示例

#在mysql 中創建一張表 t_ch,指定id為主鍵CREATE TABLE t_ch (id INT,NAME VARCHAR (255),age INT,PRIMARY KEY (id))#向表中增加一些數據insert into ?t_ch values (1,"張三",18),(2,"李四",19),(3,"王五",20)#在ClickHouse中創建MySQL引擎表 t_mysql_enginenode1 :) create table t_mysql_engine (:-] ?id UInt8,:-] ?name String,:-] ?age UInt8:-]?)engine = MySQL('node2:3306','test','t_ch','root','123456');#查詢ClickHouse表 t_mysql_engine 中的數據:node1 :) select * from t_mysql_engine;┌─id─┬─name─┬─age─┐│ ?1 ?│ 張三 ?│ ?18 ││ ?2 ?│ 李四 ?│ ?19 ││ ?3 ?│ 王五 ?│ ?20 │└────┴──────┴─────┘#在ClickHouse中向表 t_mysql_engine中插入一條數據node1 :) insert into t_mysql_engine values (4,'馬六','21');┌─id─┬─name─┬─age─┐│ ?1 ??│ 張三 ???│ ?18 ??││ ?2 ??│ 李四 ???│ ?19 ??││ ?3 ??│ 王五 ???│ ??20 ?││ ?4 ??│ 馬六 ???│ ?21 ??│└───┴─────┴───┘#在ClickHouse中向表 t_mysql_engine中再插入一條數據,這里主鍵重復,報錯。node1 :) insert into t_mysql_engine values (4,'田七','22');Exception: mysqlxx::BadQuery: Duplicate entry '4' for key'PRIMARY' (node2:3306).注意:在clickhouse 中 t_mysql_engine表不會在ClickHouse服務器節點上創建數據目錄。

2.3 測試 replace_query??

#在mysql 中刪除表 t_ch,重新創建,指定id為主鍵CREATE TABLE t_ch (id INT,NAME VARCHAR (255),age INT,PRIMARY KEY (id))#向表中增加一些數據insert into ?t_ch values (1,"張三",18),(2,"李四",19),(3,"王五",20)#在ClickHouse中刪除MySQL引擎表 t_mysql_engine,重建node1 :) create table t_mysql_engine (:-] ?id UInt8,:-] ?name String,:-] ?age UInt8:-]?)engine = MySQL('node2:3306','test','t_ch','root','123456',1);#查詢ClickHouse表 t_mysql_engine 中的數據:node1 :) select * from t_mysql_engine;┌─id─┬─name─┬─age─┐│ ?1 ?│ 張三 ?│ ?18 ││ ?2 ?│ 李四 ?│ ?19 ││ ?3 ?│ 王五 ?│ ?20 │└────┴──────┴─────┘#在ClickHouse中向表 t_mysql_engine中插入一條數據,主鍵重復。這里由于指定了replace_query = 1 ,所以當前主鍵數據會被替換成新插入的數據。node1 :) insert into t_mysql_engine values (3,'馬六','21');#查詢ClichHouse t_mysql_engine表數據node1 :)?select * from t_mysql_engine;┌─id─┬─name─┬─age─┐│ ?1 ?│ 張三 ?│ ?18 ││ ?2 ?│ 李四 ?│ ?19 ││ ?3 ?│ 馬六 ?│ ?21 │└────┴──────┴─────┘

2.4 測試 on_duplicate_clause

#在mysql 中刪除表 t_ch,重新創建,指定id為主鍵CREATE TABLE t_ch (id INT,NAME VARCHAR (255),age INT,PRIMARY KEY (id))#向表中增加一些數據insert into ?t_ch values (1,"張三",18),(2,"李四",19),(3,"王五",20)#在ClickHouse中刪除MySQL引擎表 t_mysql_engine,重建node1 :) create table t_mysql_engine (:-] ?id UInt8,:-] ?name String,:-] ?age UInt8:-]?)engine = MySQL('node2:3306','test','t_ch','root','123456',0,'update age = values(age)');#查詢ClickHouse表 t_mysql_engine 中的數據:node1 :) select * from t_mysql_engine;┌─id─┬─name─┬─age─┐│ ?1 ?│ 張三 ?│ ?18 ││ ?2 ?│ 李四 ?│ ?19 ││ ?3 ?│ 王五 ?│ ?20 │└────┴──────┴─────┘#在ClickHouse 中向表 t_mysql_engine中插入一條數據node1 :) insert into t_mysql_engine values (4,'馬六','21');┌─id─┬─name─┬─age─┐│ ?1 ??│ 張三 ???│ ?18 ??││ ?2 ??│ 李四 ???│ ??19 ?││ ?3 ??│ 王五 ???│ ?20 ??││ ?4 ??│ 馬六 ???│ ?21 ??│└──┴─────┴────┘#在ClickHouse中向表 t_mysql_engine中插入一條數據,主鍵重復。node1 :) insert into t_mysql_engine values (4,'田七','100');#查詢ClichHouse t_mysql_engine表數據node1 :)?select * from t_mysql_engine;┌─id─┬─name─┬─age─┐│ ?1 ?│ 張三 ?│ ?18 ││ ?2 ?│ 李四 ?│ ?19 ││ ?3 ?│ 王五 ?│ ?20 ││ ?4 ?│ 馬六 ?│ 100 │└────┴──────┴─────┘

??????????????3.?Kafka

ClickHouse中還可以創建表指定為Kafka為表引擎,這樣創建出的表可以查詢到Kafka中的流數據。對應創建的表不會將數據存入ClickHouse中,這里這張kafka引擎表相當于一個消費者,消費Kafka中的數據,數據被查詢過后,就不會再次被查詢到。

3.1 語法

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster](name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...) ENGINE = Kafka()SETTINGSkafka_broker_list = 'host:port',kafka_topic_list = 'topic1,topic2,...',kafka_group_name = 'group_name',kafka_format = 'data_format'[,]
  • 對以上參數的解釋:
  1. kafka_broker_list: 以逗號分隔的Kafka Broker節點列表
  2. kafka_topic_list?: topic列表
  3. kafka_group_name?: kafka消費者組名稱
  4. kafka_format : Kafka中消息的格式,例如:JSONEachRow、CSV等等,具體參照https://clickhouse.tech/docs/en/interfaces/formats/。這里一般使用JSONEachRow格式數據,需要注意的是,json字段名稱需要與創建的Kafka引擎表中字段的名稱一樣,才能正確的映射數據。

3.2 示例

#創建表 t_kafka_consumer ,使用Kafka表引擎node1 :)?create table t_kafka_consumer (:-] id UInt8,:-] name String,:-] age UInt8:-] ) engine = Kafka():-] settings:-]?kafka_broker_list='node1:9092,node2:9092,node3:9092',:-] kafka_topic_list='ck-topic',:-]?kafka_group_name='group1',:-] kafka_format='JSONEachRow';#啟動kafka,在kafka中創建ck-topic topic,并向此topic中生產以下數據:創建topic:kafka-topics.sh --zookeeper node3:2181,node4:2181,node5:2181 --create --topic ck-topic --partitions 3 --replication-factor 3生產數據:kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic ck-topic生產數據如下:{"id":1,"name":"張三","age":18}{"id":2,"name":"李四","age":19}{"id":3,"name":"王五","age":20}{"id":4,"name":"馬六","age":21}{"id":5,"name":"田七","age":22}#在ClickHouse中查詢表 t_kafka_consumer數據,可以看到生產的數據node1 :) select * from t_kafka_consumer;┌─id─┬─name─┬─age─┐│ ?2 ?│ 李四 ?│ ?19 ││ ?5 ?│ 田七 ?│ ?22 ││ ?1 ?│ 張三??│ ?18 ││ ?4 ?│ 馬六??│ ?21 ││ ?3 ?│ 王五??│ ?20 │└────┴──────┴─────┘注意:再次查看表 t_kafka_consumer數據 ,我們發現讀取不到任何數據,這里對應的ClikcHouse中的Kafka引擎表,只是相當于是消費者,消費讀取Kafka中的數據,數據被消費完成之后,不能再次查詢到對應的數據。

以上在ClickHouse中創建的Kafka引擎表 t_kafka_consumer 只是一個數據管道,當查詢這張表時就是消費Kafka中的數據,數據被消費完成之后,不能再次被讀取到。如果想將Kafka中topic中的數據持久化到ClickHouse中,我們可以通過物化視圖方式訪問Kafka中的數據,可以通過以下三個步驟完成將Kafka中數據持久化到ClickHouse中:

  1. 創建Kafka 引擎表,消費kafka中的數據。
  2. 再創建一張ClickHouse中普通引擎表,這張表面向終端用戶查詢使用。這里生產環境中經常創建MergeTree家族引擎表。
  3. 創建物化視圖,將Kafka引擎表數據實時同步到終端用戶查詢表中。

3.3 示例

#在ClickHouse中創建 t_kafka_consumer2 表,使用Kafka引擎node1 :)?create table t_kafka_consumer2?(:-] id UInt8,:-] name String,:-] age UInt8:-] ) engine = Kafka():-] settings:-]?kafka_broker_list='node1:9092,node2:9092,node3:9092',:-] kafka_topic_list='ck-topic',:-]?kafka_group_name='group1',:-] kafka_format='JSONEachRow';#在ClickHouse中創建一張終端用戶查詢使用的表,使用MergeTree引擎node1 :) create table t_kafka_mt(:-] id UInt8,:-] name String,:-] age UInt8:-] ) engine = MergeTree():-] order by id;#創建物化視圖,同步表t_kafka_consumer2數據到t_kafka_mt中node1 :) create materialized view ?view_consumer to t_kafka_mt:-] as select id,name,age from t_kafka_consumer2;注意:物化視圖在ClickHouse中也是存儲數據的,create ?materialized view ?view_consumer to t_kafka_mt?語句是將物化視圖view_consumer中的數據存儲到到對應的t_kafka_mt?表中,這樣同步的目的是如果不想繼續同步kafka中的數據,可以直接刪除物化視圖即可。#向Kafka ck-topic中生產以下數據:生產數據:kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic ck-topic生產數據如下:{"id":1,"name":"張三","age":18}{"id":2,"name":"李四","age":19}{"id":3,"name":"王五","age":20}{"id":4,"name":"馬六","age":21}{"id":5,"name":"田七","age":22}#查詢表 t_kafka_mt中的數據,數據同步完成。node1 :)?select * from t_kafka_mt;┌─id─┬─name─┬─age─┐│ ?1 ?│ 張三 ?│ ?18 ││ ?2 ?│ 李四 ?│??19 ││ ?3 ?│ 王五 ?│ ?20 ││ ?4 ?│ 馬六 ?│ ?21 ││ ?5??│ 田七 ?│ ?22 │└────┴──────┴─────┘

👨?💻如需博文中的資料請私信博主。


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

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

相關文章

IDEA常用設置與maven項目部署

目錄 前言 一、Idea是什么 二、Idea的優點 三、Idea的常用設置 主題設置 設置鼠標懸浮提示 忽略大小寫提示 自動導包 取消單行顯示Tabs 設置字體 配置類文檔注釋信息模版 設置文件編碼 設置自動編譯 水平或者垂直顯示代碼 快捷方式改成eclipse 設置默認瀏覽器…

Java并發編程(六)線程池[Executor體系]

概述 在處理大量任務時,重復利用線程可以提高程序執行效率,因此線程池應運而生。 它是一種重用線程的機制,可以有效降低內存資源消耗提高響應速度。當任務到達時,任務可以不需要的等到線程創建就能立即執行線程池可以幫助我們更好地管理線程的生命周期和資源使用,…

Jmeter - 函數助手

目錄 __StringFromFile __CSVRead __counter __RandomString __StringFromFile StringFromFile函數用于獲取文本文件的值,一次讀取一行 1、輸入文件的全路徑:填入文件路徑 2、存儲結果的變量名(可選) 3、Start file sequence …

Tomcat+Http+Servlet

文章目錄 1.HTTP1.1 請求和響應HTTP請求:請求行請求頭請求體HTTP響應:響應行(狀態行)響應頭響應體 2. Apache Tomcat2.1 基本使用2.2 IDEA中創建 Maven Web項目2.3 IDEA中使用Tomcat 3. Servlet3.1 Servlet快速入門3.2 Servlet執行…

游戲中的UI適配

引用參考:感謝GPT UI適配原理以及常用方案 游戲UI適配是確保游戲界面在不同設備上以不同的分辨率、屏幕比例和方向下正常顯示的關鍵任務。下面是一些常見的游戲UI適配方案: 1.分辨率無關像素(Resolution-Independent Pixels)&a…

CentOS 8 安裝 oracle 23c CentOS9 Error deal

1.環境準備 軟件準備 序號 軟件 下載地址 1 VirtualBox https://www.virtualbox.org/wiki/Downloads2 CentOS Stream 8 https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-latest-dvd1.iso3 oracle-database-free-23c # cd ~/Down…

Vue 3 中定義組件常用方法

在Vue 3 中有多種定義組件的方法。從選項到組合再到類 API,情況大不相同 1、方式一:Options API 這是在 Vue 中聲明組件的最常見方式。從版本 1 開始可用,您很可能已經熟悉它。一切都在對象內聲明,數據在幕后由 Vue 響應。它不是…

C語言實現快速排序

什么是快速排序? 快速排序(Quick Sort) 是一種高效的分治法排序算法。它通過選擇一個基準元素,將數組分成小于基準的部分和大于基準的部分,然后遞歸地對這些部分進行排序,最終將它們合并起來,完…

【廣州華銳視點】VR警務教育實訓系統模擬真實場景進行實踐訓練

隨著科技的發展,虛擬現實技術在教育領域得到了廣泛的應用。VR警務教育實訓系統就是其中的一種應用,該系統由廣州華銳互動開發,可以模擬真實的警務場景,讓學生通過虛擬現實技術進行實踐訓練,提高學生的實踐能力和技能水…

.NET6使用微信小程序授權登錄,獲取手機號

1.在appsettings配置你的小程序配置信息 //微信小程序信息配置"WechatConfig": {"appid": "", //小程序ID"secret": "" //小程序秘鑰},2.請求接口時先獲取Access_token #region 獲取小程序的Access_tokenpublic object GetA…

Linux:shell腳本循環語句

目錄 一、循環含義 二、echo命令 三、for 3.1.將1到100累加求和 3.2批量添加用戶 3.3 根據IP地址檢查主機狀態 四、 while 和 until 4.1 猜價格 4.2 1-100求和 一、循環含義 循環含義 將某代碼段重復運行多次,通常有進入循環的條件和退出循環的條件 重復…

視頻匯聚平臺EasyCVR視頻監控播放平臺WebRTC流地址無法播放的問題解決方案

開源EasyDarwin視頻監控TSINGSEE青犀視頻平臺EasyCVR能在復雜的網絡環境中,將分散的各類視頻資源進行統一匯聚、整合、集中管理,在視頻監控播放上,TSINGSEE青犀視頻安防監控匯聚平臺可支持1、4、9、16個畫面窗口播放,可同時播放多…

Linux的ln命令

ln是link的縮寫,在Linux中 ln 命令的功能是為某一個文件在另外一個位置建立一個同步的鏈接,當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄&#xff0…

Ubuntu18.04.4裸機配置

下載虛擬機Ubuntu18.04.4 鏈接:https://pan.baidu.com/s/1jyucyUSXa9-Fw9ctuU87hA 提取碼:o42a –來自百度網盤超級會員V5的分享 VMware選擇鏡像安裝 設置你的用戶名,就像windows上登錄用戶一樣簡單 下一步……下一步……如此簡單 下載…

Floyd(多源匯最短路)

Floyd求最短路 給定一個 n 個點 m 條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。 再給定 k 個詢問,每個詢問包含兩個整數 x 和 y,表示查詢從點 x 到點 y 的最短距離,如果路徑不存在,則輸出 impo…

每日一題 33搜素旋轉排序數組(二分)

題目 整數數組 nums 按升序排列&#xff0c;數組中的值 互不相同 。 在傳遞給函數之前&#xff0c;nums 在預先未知的某個下標 k&#xff08;0 < k < nums.length&#xff09;上進行了 旋轉&#xff0c;使數組變為 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[…

Fortinet數據中心防火墻及服務ROI超300%!Forrester TEI研究發布

近日&#xff0c;專注網絡與安全融合的全球網絡安全領導者 Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;聯合全球知名分析機構Forrester發布總體經濟影響獨立分析報告&#xff0c;詳細闡述了在企業數據中心部署 FortiGate 下一代防火墻&#xff08;NGFW&#xff09…

Django圖書商城系統實戰開發-實現商品管理

Django圖書商城系統實戰開發 - 實現商品管理 在本教程中&#xff0c;我們將使用Django框架來實現一個簡單的圖書商城系統&#xff0c;并重點討論如何實現商品管理功能。此外&#xff0c;我們還將介紹如何使用Markdown格式來寫博客&#xff0c;并將其集成到我們的圖書商城系統中…

緩存淘汰算法(LFU LRU FIFO)及進程的狀態和轉換

目錄 一、緩存淘汰算法 1.LFU&#xff08;Least Frequently Used&#xff09;最近最不常用算法 2.LRU&#xff08;Least Recently User&#xff09;最近最少使用算法 3.FIFO&#xff08;First in first out&#xff09;先進先出算法 二、進程的狀態和轉換 1.最基本的三種狀…

OpenCV圖像處理——模版匹配和霍夫變換

目錄 模版匹配原理實現 霍夫變換霍夫線檢測 模版匹配 原理 實現 rescv.matchTemplate(img,template,method)import numpy as np import cv2 as cv import matplotlib.pyplot as pltimgcv.imread(./汪學長的隨堂資料/6/模板匹配/lena.jpg) templatecv.imread(./汪學長的隨堂資…