canny算子及滑动条的使用

滑动条:
createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange = 0,
void* userdata = 0);
参数分别对应为:滑动条名称;显示窗口名称;当滑动条移到时,把当前位置的值传出来;滑动条最大值;回调函数,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须为void,其中第一个参数是轨迹条的位置,第二个参数是用户数据

具体代码:

#include<opencv2\core\core.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace cv;


int threshold1;
int threshold2;
//回调函数
void on_change(int,void*){
    Mat image=imread("F:\\opencv_test\\6.tif");
    Mat result;
    //canny算子,threshold1,threshold2表示双阈值
    Canny(image,result,threshold1,threshold2);
    imshow("canny",result);


}

int main(){

    threshold1=0;
    threshold2=0;
    namedWindow("canny",0);
    //创建滑动条
    createTrackbar("low threshold","canny",&threshold1,300,on_change);
    createTrackbar("high threshold","canny",&threshold2,300,on_change);
    //调用回调函数
    on_change(threshold1,0);
    on_change(threshold2,0);

    waitKey(0);
    return 0;
}

实验结果

(注:本回答假设题目中的matble是指MATLAB,如果不是,请忽略) 一、界面设计 为了方便用户使用,我们可以设计一个图形用户界面(GUI),包括单选按钮、下拉列表、滑动和输出框。具体设计如下图所示: ![GUI界面设计](https://i.ibb.co/2dK8QfQ/matlab-GUI.png) 界面包括以下几个部分: 1. 单选按钮:选择处理算法,分别为: - 自适应阈值法:使用自适应阈值法进行图像二值化处理。 - Otsu法:使用Otsu法进行图像二值化处理。 - Sobel算子使用Sobel算子进行边缘检测。 - Canny算子使用Canny算子进行边缘检测。 2. 下拉列表:选择开运算或闭运算,分别为: - 开运算:先腐蚀后膨胀,用于去除小的噪点。 - 闭运算:先膨胀后腐蚀,用于填充小的空洞。 3. 滑动:调整阈值或算子参数。 4. 输出框:显示处理后的红细胞数目。 二、实现过程 1. 图像读取 使用imread函数读取待处理的红细胞图像。 ``` I = imread('red_blood_cell.jpg'); ``` 2. 图像预处理 调用单选按钮和下拉列表选择的处理算法,对图像进行预处理。 自适应阈值法: ``` bw = imbinarize(I,'adaptive','ForegroundPolarity','dark','Sensitivity',get(handles.slider1,'Value')); ``` Otsu法: ``` level = graythresh(I); bw = imbinarize(I,level); ``` Sobel算子: ``` BW = edge(I,'sobel',get(handles.slider1,'Value')); ``` Canny算子: ``` BW = edge(I,'canny',get(handles.slider1,'Value')); ``` 开运算: ``` se = strel('disk',get(handles.slider2,'Value')); bw = imopen(bw,se); ``` 闭运算: ``` se = strel('disk',get(handles.slider2,'Value')); bw = imclose(bw,se); ``` 3. 计算红细胞数目 使用bwconncomp函数计算二值化图像中的连通区域,即红细胞的数量。 ``` cc = bwconncomp(bw); num_red_blood_cell = cc.NumObjects; ``` 4. 显示结果 将计算得到的红细胞数目显示在输出框中。 ``` set(handles.edit1,'String',num2str(num_red_blood_cell)); ``` 三、处理算法支持 1. 图像二值化:自适应阈值法、Otsu法。 2. 边缘检测:Sobel算子Canny算子。 3. 形态学处理:开运算、闭运算。 以上算法均有MATLAB内置函数支持,并且在本程序中通过单选按钮和下拉列表进行选择。同时,滑动可以调整算法的参数,增加了程序的可调节性和可扩展性。 四、总结 本程序设计了一个GUI界面,方便用户选择不同的处理算法和参数,实现了红细胞数目检测。同时,支持多种处理算法,增加了程序的灵活性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值