顯示具有 1051766 標籤的文章。 顯示所有文章
顯示具有 1051766 標籤的文章。 顯示所有文章

2019年6月4日 星期二

s1051766 的 作業5

數學型態學影像處理應用


請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中
圍棋個數。

========================================

思路:

  1. 256色灰阶读入图像
  2. 将图片进行二极化处理
  3. 对图片进行腐蚀处理(去除白噪声)
  4. 对图片进行膨胀处理(用来分开连接的两个物体,通常都是先腐蚀后膨胀)
  5. 对图片进行轮廓检测,得到围棋个数

做法:

  1. cv2.imread("",0)读入图片
  2. cv2.threshold()对图片进行二极化处理
  3. cv2.erode()对图片进行腐蚀处理
  4. cv2.dilate()对图片进行膨胀处理
  5. cv2.findContours()对图片进行轮廓检测

输出示意图
图片示意图

2019年5月12日 星期日

s1051766 的 作業4

Skin Color Detection

利用你所學的顏色的知識,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標

示出。

===================================================================


思路


  1. 读入图片
  2. 将图片的色彩空间转为HSV
  3. 循环遍历原图片的每个像素判断是否在某个范围内
  4. 在范围内则输出这个点的像素和位置到另一张图像,反之则设为黑色
  5. 输出另一张图像

做法

  1. cv2.imread()读入图片 (此时色彩空间为BGR)
  2. cv2.cvtColor可转换色彩空间,先转为BGR即cv2.cvtColor(img,cv2.COLOR_BGR2RGB),然后转为HSV即cv2.cvtColor(img,cv2.COLOR_RGB2HSV)
  3. 循环遍历图片的每个像素判断是否在范围内
  4. 输出图像
示意图

s1051766 的 作業3

離散傅立葉轉換 DFT 練習

請撰寫一個程式,讀取一張 256 色灰階圖像。計算輸入圖的離散傅立葉轉換結果,並
將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出。


===========================================================


思路:

  1. 256色灰阶读取图像
  2. 计算输入图的离散傅里叶转换结果并输出
  3. 输出原图像
  4. 将频谱以灰阶256色图像输出
  5. 将相位以灰阶256色图像输出

做法:
  1. 以cv2.imread('',0)读入图片,此时为256灰阶
  2. 通过搜索找到opencv2的函数opencv2.dft()可以得到图像的傅里叶转换结果
  3. 使用numpy.fft.fftshift()进行移频操作
  4. 使用cv2.phase()获得相位图
  5. 使用cv2.magnitude()获得频谱图
  6. 各以灰阶256色图像方式输出

傅里叶转换结果:
original:
[[225 225 224 ..., 230 230 230]
 [225 225 225 ..., 230 230 230]
 [225 225 225 ..., 230 230 230]
 ..., 
 [255 255 255 ..., 255 255 255]
 [255 255 255 ..., 255 255 255]
 [255 255 255 ..., 255 255 255]]


dft:
[[[  1.18686848e+08   0.00000000e+00]
  [  6.66400700e+06  -1.01703138e+06]
  [  5.13113062e+05   1.00051762e+06]
  ..., 
  [ -1.39588925e+06   3.09186836e+04]
  [  5.13113062e+05  -1.00051762e+06]
  [  6.66400700e+06   1.01703138e+06]]

 [[  1.45740675e+06   2.16409500e+06]
  [  1.32182250e+06  -2.12420195e+04]
  [ -3.22664025e+06   5.83794062e+04]
  ..., 
  [ -2.06723516e+04   1.36864638e+06]
  [ -3.05901500e+06  -7.10340062e+05]
  [  1.35342000e+06   9.23397344e+04]]

 [[ -7.53761562e+05  -4.72593531e+05]
  [ -3.11442000e+05   2.26395000e+06]
  [  3.66675656e+05  -1.21739962e+06]
  ..., 
  [  9.70380500e+05  -7.07127750e+05]
  [  6.20124500e+05  -2.24606391e+05]
  [ -5.78688562e+05   1.64234800e+06]]

 ..., 
 [[ -8.94402812e+05   1.86397175e+06]
  [  7.91437688e+05  -1.65669188e+06]
  [  3.29240195e+04   1.21293025e+06]
  ..., 
  [ -5.91609375e+05  -9.13635812e+05]
  [ -3.06096875e+05   1.04363288e+06]
  [  9.95784062e+05  -1.55982125e+06]]

 [[ -7.53761625e+05   4.72593531e+05]
  [ -5.78688562e+05  -1.64234800e+06]
  [  6.20124500e+05   2.24606391e+05]
  ..., 
  [  1.04321825e+06   6.35987938e+05]
  [  3.66675656e+05   1.21739962e+06]
  [ -3.11442000e+05  -2.26395000e+06]]

 [[  1.45740662e+06  -2.16409500e+06]
  [  1.35342000e+06  -9.23397344e+04]
  [ -3.05901500e+06   7.10340062e+05]
  ..., 
  [  8.36184938e+05  -7.52560688e+05]
  [ -3.22664025e+06  -5.83794062e+04]
  [  1.32182250e+06   2.12420195e+04]]]

示意图

2019年3月23日 星期六

s1051766 的 作業2

首先,通过文档我们可以整理出以下思路



  1. 以RGB色彩空间读入图片
  2. 将图片转为HIS或YUV、YCbCr等色彩空间
  3. 以SobelOperators侦测图像边缘
  4. 对亮度进行处理
  5. 转为RGB色彩空间
那么接下来只需要一步步完成即可

  • 以cv2.imread()读入图片  (有的文章提到此时读入的图片为BGR色彩空间?)
  • 通过cv2.cvtColor将图片转为YCbCr色彩空间
  • 通过SobelOperators侦测图像边缘,这里通过搜索找到cv2.Sobel()方法,具体使用方法可以参考官方文档Opencv官方文档
  • 将数据格式转回到uint8,这里官方文档也提到一句话in the case of 8-bit input images it will result in truncated derivatives ,即通过Sobel()函数之后可能会产生负数或超过255的数,而uint8为无符号数。这里可以一步步输出image.dtype查看数据格式,第一步读取图片时为uint8,而通过Sobel()方法时数据格式就会发生改变(根据你所设定的depth参数),所使用函数为cv2.convertScaleAbs()
  • 对亮度进行处理
  • 通过cv2.cvtColor将图片转为RGB色彩空间
图片示意图如下


2019年3月11日 星期一

s1051766 的 作業1

通过opencv2.createTrackbar设置滑动条,不过由于无法设置负值(即无法通过一个滑动条将亮度从-255拉至+255),于是设置了一个+V通道和一个-V通道进行代替。