日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图像处理入门 100 题,有人把它翻译成了中文版!

發布時間:2025/3/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像处理入门 100 题,有人把它翻译成了中文版! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“AI有道”,選擇“星標”公眾號

重磅干貨,第一時間送達

但是,這份資源教程是由日本人寫的,日文版,讀起來非常不方便。好消息,最近我在逛 GitHub 的時候,發現有人將這份教程翻譯成了中文版。該項目包含了 CV 領域,OpenCV 圖像處理入門 100 題實例解析,并配備完整的 Pyhon 代碼。

首先,放上原版日文地址:

https://github.com/yoyoyo-yo/Gasyori100knock

對應的中文版翻譯地址:

https://github.com/gzr2017/ImageProcessing100Wen

Tutorial

這部分的極簡教程主要是介紹圖像處理開源庫 OpenCV 的安裝,讀取、顯示圖像、操作像素等一些基本操作。分為 Python 版和 C++ 兩種形式。

作者推薦了 OpenCV 的極簡安裝方法:

1. 安裝 MiniConda

地址:https://conda.io/miniconda.html

2. 創建虛擬環境并激活

$?conda create python = 3.6 ?- ?n gasyori 100 $?source?actiavte gasyori 100

3. 安裝包

$?pip install -r requirement.txt

其中,requirement.txt 文件在項目根目錄下,下載至命令行所在目錄直接運行上述命令即可。

該項目總共包含了 100 道圖像處理入門題,下面分別來看一下!

問題 1-10

這部分提供了 Python 和 C++?兩種形式。例如看中值濾波算法。

Python:

import cv2 import numpy as?np# Read image img = cv2.imread("imori_noise.jpg") H, W, C = img.shape# Gaussian Filter K_size = 3 sigma = 1.3## Zero padding pad = K_size // 2 out?= np.zeros((H + pad*2, W + pad*2, C), dtype=np.float) out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float)## Kernel K = np.zeros((K_size, K_size), dtype=np.float) for?x in?range(-pad, -pad+K_size):for?y in?range(-pad, -pad+K_size):K[y+pad, x+pad] = np.exp( -(x**2?+ y**2) / (2* (sigma**2))) K /= (sigma * np.sqrt(2?* np.pi)) K /= K.sum()tmp = out.copy()for?y in?range(H):for?x in?range(W):for?c in?range(C):out[pad+y, pad+x, c] = np.sum(K * tmp[y:y+K_size, x:x+K_size, c])out?= out[pad:pad+H, pad:pad+W].astype(np.uint8)# Save result cv2.imwrite("out.jpg", out) cv2.imshow("result", out) cv2.waitKey(0) cv2.destroyAllWindows()

C++ 版:

#include?<opencv2/core.hpp> #include?<opencv2/highgui.hpp> #include?<iostream> #include?<math.h>// gaussian filter cv::Mat gaussian_filter(cv::Mat img, double?sigma, int?kernel_size){int?height = img.rows;int?width = img.cols;int?channel = img.channels();// prepare outputcv::Mat out = cv::Mat::zeros(height, width, CV_8UC3);// prepare kernelint?pad = floor(kernel_size / 2);int?_x = 0, _y = 0;double?kernel_sum = 0;// get gaussian kernelfloat?kernel[kernel_size][kernel_size];for?(int?y = 0; y < kernel_size; y++){for?(int?x = 0; x < kernel_size; x++){_y = y - pad;_x = x - pad;kernel[y][x] = 1?/ (2?* M_PI * sigma * sigma) * exp( - (_x * _x + _y * _y) / (2?* sigma * sigma));kernel_sum += kernel[y][x];}}for?(int?y = 0; y < kernel_size; y++){for?(int?x = 0; x < kernel_size; x++){kernel[y][x] /= kernel_sum;}}// filteringdouble?v = 0;for?(int?y = 0; y < height; y++){for?(int?x = 0; x < width; x++){for?(int?c = 0; c < channel; c++){v = 0;for?(int?dy = -pad; dy < pad + 1; dy++){for?(int?dx = -pad; dx < pad + 1; dx++){if?(((x + dx) >= 0) && ((y + dy) >= 0)){v += (double)img.at<cv::Vec3b>(y + dy, x + dx)[c] * kernel[dy + pad][dx + pad];}}}out.at<cv::Vec3b>(y, x)[c] = v;}}}return?out; }int?main(int?argc, const?char* argv[]){// read imagecv::Mat img = cv::imread("imori_noise.jpg", cv::IMREAD_COLOR);// gaussian filtercv::Mat out = gaussian_filter(img, 1.3, 3);//cv::imwrite("out.jpg", out);cv::imshow("answer", out);cv::waitKey(0);cv::destroyAllWindows();return?0; }

問題 11-20

問題 21-30

問題 31-40

問題 41-50

問題 51-60

問題?61-70

問題?71-80

問題 81-90

問題 91-100

該項目最大的特色就是 100 題循序漸進,基本涵蓋了 OpenCV 的關鍵知識點。如果你正在入門 CV,正在學習 OpenCV,那么這個項目將會是一個不錯的從入門到進階的教程。上手代碼,親自跑一跑結果,希望對大家有所幫助!


推薦閱讀

(點擊標題可跳轉閱讀)

總結

以上是生活随笔為你收集整理的图像处理入门 100 题,有人把它翻译成了中文版!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。