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

2019年6月13日 星期四

s1051423的作業5

一、題目: 
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中 圍棋個數。
a. 請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋 子數量的螢幕截圖。
b. 程式不一定可以算出正確棋子數量,越接近正確答案越好!

二、環境: 
MS Window 10
Visual Studio 2017
OpenCV 3.4.1

三、說明: 
1. 載入影像
    Mat src = imread( [ 圖片檔名 ] , CV_LOAD_IMAGE_GRAYSCALE);

2. 調整影像大小至 800 X 533

    resize(src, src_rs, Size(800, 533), 0, 0, INTER_LINEAR);

3. 
將影像二值化(以120做為閥值)
    threshold(src_rs, src2, 120, 255, THRESH_BINARY);

4. 取得要進行dilate的模板(模板形狀選用矩形)
    getStructuringElement(MORPH_RECT, Size(30, 30));

5. 將影像用上面取得的模板做膨脹

    dilate(src2, dst, element);

6. 數棋子

    用dst.at<uchar>(i, j)尋找每個像素,當為0(黑色)時,以那個像素為中心點將周圍延伸95 X 95像素
    改為125(灰色),同時count + 1,然後繼續尋找直到全部像素找完

7. 輸出count

四、實作:
1. IMG_5702.JPG
 


2. IMG_5703.JPG



3. IMG_5704.JPG

2019年5月8日 星期三

s1051423的作業2

一、題目: 
撰寫一個程式,讀取一張 256 色灰階圖像或 RGB 全彩圖像(.bmp 或.jpg 圖像格式都可) ,利用 Sobel Operators 偵測圖像邊緣,並以邊緣偵測為基礎(如彩色圖像針可先將圖片 由 RGB 轉換至 HIS 或 YUV, YCbCr 等色彩空間,只需對亮度 Channel I 或 Y 處理,再 轉回 RGB 即可),設計一個類似素描線條自畫像程式。

二、環境: 
MS Window 10
Visual Studio 2017
OpenCV 3.4.0


三、說明: 
1. 載入影像
    Mat src = imread("pic.jpg", CV_LOAD_IMAGE_GRAYSCALE);

2. 去除雜訊使圖片平滑

    GaussianBlur(src, src, Size(3, 3), 0, 0);

3. 找邊緣(X軸和Y軸各進行一次)

    void Sobel(InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT)

4. 計算輸入圖各像素,並將結果轉成8位元圖(X軸和Y軸各進行一次)
    void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0)

5. 將X軸和Y軸分析邊緣的影像結合

    addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst1);

6. 將影像二值化(以128做為閥值)

    threshold(dst1, dst2, 128, 255, THRESH_BINARY_INV | THRESH_OTSU);

7.輸出影像
   imshow("origin", src);
   imshow("Sobel_1", dst1);
   imshow("Sobel_2", dst2);

四、實作: 

                                      原圖

                                   找出邊緣之後                                                                             

                         二值化之後的最後結果

2019年3月20日 星期三

1051423 的作業1

一、題目: 
撰寫一個程式從檔案讀取一張圖像,將圖像的每一個點像素的值各加上一個整數值 v (-255 <= v <= 255),並將圖像儲存至一個新圖像檔案中。

二、環境: 
MS Window 10
Visual Studio 2017
OpenCV 3.4.1


三、說明: 
1. 載入影像
    Mat img = imread("color_pic.png", CV_LOAD_IMAGE_COLOR);

2. 建立視窗
    namedWindow("Homework 1", 1);

3. 4個滑桿分別調整 "亮度" 和 "對比度",移動滑桿呼叫on_trackbar()
    createTrackbar("亮度(+)", "Homework 1", &brightness_p, bp_maxValue, on_trackbar);
    on_trackbar(brightness_p, 0);

4. on_trackbar()

    (1) 使用ptr處理每個像素
         const uchar *imgPtr = img.ptr<const uchar>(iH);
         uchar *dstPtr = dst.ptr<uchar>(iH);
    (2) y = a * x + b,對比度為 a 和 b 調整,亮度為 b 調整  &  (3) saturate_cast<uchar>處理溢位問題
         dstPtr[iW] = saturate_cast<uchar>(contrast*imgPtr[iW] + brightness + (1 - contrast) * 125);
    (4) 呈現影像
         imshow("Homework 1", dst);

5. 建立滑鼠事件
    setMouseCallback("Homework 1", onMouse, NULL);

6. 偵測左鍵雙擊,儲存影像
    if (Event == CV_EVENT_LBUTTONDBLCLK)
         imwrite("output.png", dst);

四、實作: 


原圖


亮度增加 (+87)                                                                           亮度降低 (-87)

對比度增加 (x2.0)                                                                      對比度降低 (x0.5)

亮度增加 (+87) + 對比度增加 (x2.0)                                          亮度降低 (-87) + 對比度增加 (x2.0)

亮度增加 (+87) + 對比度降低 (x2.0)                                          亮度降低 (-87) + 對比度降低 (x2.0)