開運算:對區域先進行腐蝕操作,然后對腐蝕的結果再進行膨脹操作,稱為開運算
開運算特點:具有與腐蝕相似的特點,但是能夠防止區域腐蝕過度,能夠很好的保持區域的形狀。
效果:能去除毛刺
opening_circle區域圓開運算
在HDevelop中
dev_update_off() read_image (Image, 'D:/bb/tu/1.jpg') rgb1_to_gray(Image,Image1) threshold (Image1, Region, 200, 230) opening_circle (Region, RegionOpening, 2.5) *區域圓開運算 *參數1:要開運算的區域 *參數2:輸出區域 *結構圓半徑 get_image_size (Image1, Width, Height) dev_open_window(10,10,Width, Height,'black',WindowHandle) dev_display(Region) dev_open_window(10,100,Width, Height,'black',WindowHandle1) dev_display(RegionOpening)
在QtCreator中
HObject ho_Image, ho_Image1, ho_Region, ho_RegionOpening;
HTuple hv_Width, hv_Height, hv_WindowHandle;
HTuple hv_WindowHandle1;
ReadImage(&ho_Image, "D:/bb/tu/1.jpg"); Rgb1ToGray(ho_Image, &ho_Image1); Threshold(ho_Image1, &ho_Region, 200, 230); OpeningCircle(ho_Region, &ho_RegionOpening, 2.5); //區域圓開運算 //參數1:要開運算的區域 //參數2:輸出區域 //結構圓半徑 GetImageSize(ho_Image1, &hv_Width, &hv_Height); SetWindowAttr("background_color","black"); OpenWindow(10,10,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); if (HDevWindowStack::IsOpen()) DispObj(ho_Region, HDevWindowStack::GetActive()); SetWindowAttr("background_color","black"); OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1); HDevWindowStack::Push(hv_WindowHandle1); if (HDevWindowStack::IsOpen()) DispObj(ho_RegionOpening, HDevWindowStack::GetActive());
opening_rectangle1區域矩形開運算
在HDevelop中
dev_update_off() read_image (Image, 'D:/bb/tu/2.jpg') rgb1_to_gray(Image,Image1) threshold (Image1, Region, 200, 230) opening_rectangle1 (Region, RegionOpening, 10, 10) *區域矩形開運算 *參數1:要開運算的區域 *參數2:輸出區域 *結構矩形的寬和高 get_image_size (Image1, Width, Height) dev_open_window(10,10,Width, Height,'black',WindowHandle) dev_display(Region) dev_open_window(10,100,Width, Height,'black',WindowHandle1) dev_display(RegionOpening)
在Qt Creator中
HObject ho_Image, ho_Image1, ho_Region, ho_RegionOpening;
HTuple hv_Width, hv_Height, hv_WindowHandle;
HTuple hv_WindowHandle1;
ReadImage(&ho_Image, "D:/bb/tu/2.jpg"); Rgb1ToGray(ho_Image, &ho_Image1); Threshold(ho_Image1, &ho_Region, 200, 230); OpeningRectangle1(ho_Region, &ho_RegionOpening, 10, 10); //區域矩形開運算 //參數1:要開運算的區域 //參數2:輸出區域 //結構矩形的寬和高 GetImageSize(ho_Image1, &hv_Width, &hv_Height); SetWindowAttr("background_color","black"); OpenWindow(10,10,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); if (HDevWindowStack::IsOpen()) DispObj(ho_Region, HDevWindowStack::GetActive()); SetWindowAttr("background_color","black"); OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1); HDevWindowStack::Push(hv_WindowHandle1); if (HDevWindowStack::IsOpen()) DispObj(ho_RegionOpening, HDevWindowStack::GetActive());
gray_opening_rect圖像開運算
在HDevelop中
dev_update_off() read_image (Image, 'D:/bb/tu/2.jpg') rgb1_to_gray(Image,Image1) gray_opening_rect (Image1, ImageOpening, 11, 11) *圖像開運算 *參數1:要開運算的單通道圖像 *參數2:輸出圖像 *結構矩形的寬和高 get_image_size (Image1, Width, Height) dev_open_window(10,100,Width, Height,'black',WindowHandle) dev_display(Image1) dev_open_window(10,100,Width, Height,'black',WindowHandle1) dev_display(ImageOpening)
在Qt Creator中
HObject ho_Image, ho_Image1, ho_ImageOpening;
HTuple hv_Width, hv_Height, hv_WindowHandle;
HTuple hv_WindowHandle1;
ReadImage(&ho_Image, "D:/bb/tu/2.jpg"); Rgb1ToGray(ho_Image, &ho_Image1); GrayOpeningRect(ho_Image1, &ho_ImageOpening, 11, 11); //圖像開運算 //參數1:要開運算的單通道圖像 //參數2:輸出圖像 //結構矩形的寬和高 GetImageSize(ho_Image1, &hv_Width, &hv_Height); SetWindowAttr("background_color","black"); OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); if (HDevWindowStack::IsOpen()) DispObj(ho_Image1, HDevWindowStack::GetActive()); SetWindowAttr("background_color","black"); OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1); HDevWindowStack::Push(hv_WindowHandle1); if (HDevWindowStack::IsOpen()) DispObj(ho_ImageOpening, HDevWindowStack::GetActive());
gray_opening_shape圖像開運算
在HDevelop中
dev_update_off() read_image (Image, 'D:/bb/tu/2.jpg') rgb1_to_gray(Image,Image1) gray_opening_shape (Image1, ImageOpening, 11, 11, 'octagon') *圖像開運算 *參數1:要開運算的單通道圖像 *參數2:輸出圖像 *參數3和參數4:結構矩形的寬和高 *參數5:結構元形狀 * 'octagon' 八角形 * 'rectangle' 矩形 * 'rhombus' 棱形 get_image_size (Image1, Width, Height) dev_open_window(10,100,Width, Height,'black',WindowHandle) dev_display(Image1) dev_open_window(10,100,Width, Height,'black',WindowHandle1) dev_display(ImageOpening)
在Qt Creator中
HObject ho_Image, ho_Image1, ho_ImageOpening;
HTuple hv_Width, hv_Height, hv_WindowHandle;
HTuple hv_WindowHandle1;
ReadImage(&ho_Image, "D:/bb/tu/2.jpg"); Rgb1ToGray(ho_Image, &ho_Image1); GrayOpeningShape(ho_Image1, &ho_ImageOpening, 11, 11, "octagon"); //圖像開運算 //參數1:要開運算的單通道圖像 //參數2:輸出圖像 //參數3和參數4:結構矩形的寬和高 //參數5:結構元形狀 // 'octagon' 八角形 // 'rectangle' 矩形 // 'rhombus' 棱形 GetImageSize(ho_Image1, &hv_Width, &hv_Height); SetWindowAttr("background_color","black"); OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); if (HDevWindowStack::IsOpen()) DispObj(ho_Image1, HDevWindowStack::GetActive()); SetWindowAttr("background_color","black"); OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1); HDevWindowStack::Push(hv_WindowHandle1); if (HDevWindowStack::IsOpen()) DispObj(ho_ImageOpening, HDevWindowStack::GetActive());