图像边界提取 c语言,opencv3/C++图像边缘提取方式

canny算子实现使用track bar 调整canny算子参数,提取到合适的图像边缘。#include#includeusing namespace cv;void trackBar(int, void*);int s1=0,s2=0;Mat src, dst;int main(){src = imread("E:/image/image/daibola.jpg");if(src.empty()...
摘要由CSDN通过智能技术生成

canny算子实现

使用track bar 调整canny算子参数,提取到合适的图像边缘。

#include

#include

using namespace cv;

void trackBar(int, void*);

int s1=0,s2=0;

Mat src, dst;

int main()

{

src = imread("E:/image/image/daibola.jpg");

if(src.empty())

{

printf("can not load image \n");

return -1;

}

cvNamedWindow("input", CV_WINDOW_AUTOSIZE);

imshow("input", src);

dst = src.clone();

cvNamedWindow("output", CV_WINDOW_AUTOSIZE);

createTrackbar("canny1", "output", &s1, 255, trackBar);

createTrackbar("canny2", "output", &s2, 255, trackBar);

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

waitKey();

return 0;

}

void trackBar(int, void*)

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/***************************************************************** * Copyright (C) 2010 SDUST STUDIO 版权所有 * * 如果您在本代码的基础上进行改进或修改,请花费您宝贵的1分钟给作者发送一个附件,以进行交流,谢谢 * 欢迎与作者联系交流 * * 文件名称: .cs * 功能描述: * 作者: Leon * 创建时间: [10/29/2010 Leon] * 前景为白(1,或非零), 背景为黑(0); 仅对第一块连续的区域进行外边界标记, 有两种方式可以选择:短边界序列和完全边界序列 短边界是化简后的结果,标记了一些关键点,将这些关键点用直线连接,即得到边界线 目前完成的是8邻域,4邻域用到的情况较少,朋友们可以自己比照着8邻域来完成。 * 修改记录: * 修改人: *********************************************************************/ #include <QList> #include <QPoint> class CTrackBoundary { public: CTrackBoundary(void); ~CTrackBoundary(void); enum TrackType {Four, Eight}; // 4-邻域, 8-邻域 int row() { return m_Row; } int column(){ return m_Coulumn; } QList<QPoint> getBoundaryList() { return m_Boundary; } QList<QPoint> getShortBoundaryList() { processBoundary(); return m_ShortBoundary; } // 获取只有边界的矩阵 int** getBoundaryMatrix() { return m_isBoundary; } void setTrackType(TrackType tType) { m_Type = tType; } // 定义场景矩阵 void setMatrix(double**tMat, int iRowCount, int iColCount); void setMatrix(int iRowCount, int iColCount); void setMatrixItem(double value, int iRow, int iCol); // 执行搜边界 void action(); private: TrackType m_Type; int m_Row; int m_Coulumn; double** m_Mat; int** m_isBoundary; // 起点为6,终点8, 其余6 QList<QPoint> m_Boundary; QList<QPoint> m_ShortBoundary; int m_Four[4]; int m_Eight[8]; // 初始化矩阵 void initMatrix(); void clear(); // 计算邻域中某序号对应的偏移 void Num2XY(const int tNumber, int& dX, int& dY); void XY2Num(int& tNumber, const int dX, const int dY); // 查找第一个点的 iRow 和 iCol bool findStart(int& iRow, int& iCol); // 看(iRow, iCol)点是否是边界 int checkBoundray(int iRow, int iCol); int findNextBoundray(const int iRow, const int iCol, const int iStart, int& nRow, int& nCol); int findNextBoundray_Four(const int iRow, const int iCol, const int iStart, int& nRow, int& nCol); int findNextBoundray_Eight(const int iRow, const int iCol, const int iStart, int& nRow, int& nCol); bool atEnd(int iRow, int iCol); // 化简边界 void processBoundary(); };

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值