opencv<三>基于opencv的canny检测

基于opencv的canny检测

    

#include "cv.h"
#include "highgui.h"

IplImage* doCanny(
    IplImage* in,
    double    lowThresh,
    double    highThresh,
    double    aperture)
{
    if (in->nChannels != 1)
        return(0); //只能处理灰度图像
    IplImage* out = cvCreateImage(
        cvGetSize( in ),
        in->depth, //8位   
        1);//建一个8位灰度图像
    cvCanny( in, out, lowThresh, highThresh, aperture );//函数的第二及第三个参数为两个阈值。
 //小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割
    return( out );
};

int main( int argc, char** argv )
{
  IplImage* img_rgb = cvLoadImage( "D:\\vs2008\\project\\canny检测\\lena.jpg" );
  IplImage* img_gry = cvCreateImage( cvSize( img_rgb->width,img_rgb->height ), img_rgb->depth, 1);
  cvCvtColor(img_rgb, img_gry ,CV_BGR2GRAY);//RGB转化为灰度图像
  cvNamedWindow("RGB图像", CV_WINDOW_AUTOSIZE );
  cvNamedWindow("Gray图像", CV_WINDOW_AUTOSIZE );
  cvNamedWindow("Canny检测图像", CV_WINDOW_AUTOSIZE );
  cvShowImage("Gray图像", img_gry );
  cvShowImage("RGB图像", img_rgb );
  IplImage* img_cny = doCanny( img_gry, 10, 100, 3 );//设置第一阈值和第二阈值,以及soble算子参数
  cvShowImage("Canny检测图像", img_cny );
  cvWaitKey(0);
  cvReleaseImage( &img_rgb);
  cvReleaseImage( &img_gry);
  cvReleaseImage( &img_cny);
  cvDestroyWindow("RGB图像");
  cvDestroyWindow("Gray图像");
  cvDestroyWindow("Canny检测图像");
}
原图

灰度图

canny边缘检测

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java OpenCV中的Polyfit函数来进行线性回归拟合直线。该函数可以通过输入一系列的数据点,返回一条最优拟合直线的参数。 以下是一个使用Polyfit函数进行线性回归拟合直线的示例代码: ```java import org.opencv.core.*; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import java.util.ArrayList; import java.util.List; public class LinearRegressionExample { public static void main(String[] args) { // Load image Mat image = Imgcodecs.imread("path/to/image.jpg"); // Convert to grayscale Mat gray = new Mat(); Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY); // Detect edges Mat edges = new Mat(); Imgproc.Canny(gray, edges, 50, 200); // Find contours List<MatOfPoint> contours = new ArrayList<>(); Imgproc.findContours(edges, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); // Fit lines to contours for (MatOfPoint contour : contours) { double[] coefficients = new double[2]; MatOfPoint2f curve = new MatOfPoint2f(contour.toArray()); Imgproc.fitLine(curve, new Mat(), Imgproc.DIST_L2, 0, 0.01, 0.01, coefficients); double k = coefficients[1] / coefficients[0]; double b = coefficients[3] - k * coefficients[2]; System.out.println("Line equation: y = " + k + "x + " + b); } } } ``` 在上面的代码中,我们首先将图像转换为灰度图像,并使用Canny算法检测边缘。然后,我们使用findContours函数查找所有轮廓,并对每个轮廓使用fitLine函数进行线性回归拟合。最后,我们输出每条直线的方程。 注意,Polyfit函数返回的参数是一个数组,其中包含拟合直线的斜率和截距。在上面的代码中,我们计算了斜率和截距,并输出了线性方程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值