美文网首页
案例二 图像分割

案例二 图像分割

作者: 带着白卡去旅行 | 来源:发表于2018-09-05 18:40 被阅读39次

基于连通域的图像分割案例

可以用于物体计数和区域分割
码上 后期进行更改优化

#include <opencv2/core/utility.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
 
using namespace cv;
using namespace std;
 
Mat img;
int threshval = 100;
 
static void on_trackbar(int, void*)
{
    Mat bw = threshval < 128 ? (img < threshval) : (img > threshval);
    Mat labelImage(img.size(), CV_32S);
    int nLabels = connectedComponents(bw, labelImage, 8);
    std::vector<Vec3b> colors(nLabels);
    colors[0] = Vec3b(0, 0, 0);//background
    for (int label = 1; label < nLabels; ++label) {
        colors[label] = Vec3b((rand() & 255), (rand() & 255), (rand() & 255));
    }
    Mat dst(img.size(), CV_8UC3);
    for (int r = 0; r < dst.rows; ++r) {
        for (int c = 0; c < dst.cols; ++c) {
            int label = labelImage.at<int>(r, c);
            Vec3b &pixel = dst.at<Vec3b>(r, c);
            pixel = colors[label];
        }
    }
 
    imshow("Connected Components", dst);
}
 
static void help()
{
    cout << "\n This program demonstrates connected components and use of the trackbar\n"
        "Usage: \n"
        "  ./connected_components <image(../data/stuff.jpg as default)>\n"
        "The image is converted to grayscale and displayed, another image has a trackbar\n"
        "that controls thresholding and thereby the extracted contours which are drawn in color\n";
}
 
const char* keys =
{
    "{help h||}{@image|../data/stuff.jpg|image for converting to a grayscale}"
};
 
int main(int argc, const char** argv)
{
    CommandLineParser parser(argc, argv, keys);
    if (parser.has("help"))
    {
        help();
        return 0;
    }
    string inputImage = parser.get<string>(0);
    //img = imread(inputImage.c_str(), 0);
    img = imread("1.png", 0);
    if (img.empty())
    {
        cout << "Could not read input image file: " << inputImage << endl;
        return -1;
    }
 
    namedWindow("Image", 1);
    imshow("Image", img);
 
    namedWindow("Connected Components", 1);
    createTrackbar("Threshold", "Connected Components", &threshval, 255, on_trackbar);
    on_trackbar(threshval, 0);
 
    waitKey(0);
    return 0;
}

相关文章

  • 案例二 图像分割

    基于连通域的图像分割案例 可以用于物体计数和区域分割码上 后期进行更改优化

  • 我所了解的图像分割

    图像分割是我大二2019年做的东西,这篇文章用来总结。 一、什么是图像分割 分语义【像素级别图像】,实例【分割物体...

  • 基于遗传算法和大津阈值分割法实现的图像分割

    一、简述 本实验采用遗传算法和大津阈值分割法确定图像分割的最佳阈值,从而对图像进行二值化分割。 二、大津阈值分割法...

  • 【图像分割应用】医学图像分割(二)——心脏分割

    这是专栏《图像分割应用》的第2篇文章,本专栏主要介绍图像分割在各个领域的应用、难点、技术要求等常见问题。 相比较脑...

  • 图像分割

    图像分割 什么是图像分割? 图像分割就是预测图像中每一个像素所属的类别或者物体。图像分割有两个子问题,一个是只预测...

  • 图像分割算法总结

    图像处理的很多任务都离不开图像分割。因为图像分割在cv中实在太重要(有用)了,就先把图像分割的常用算法做个总...

  • openCV:图像的阈值处理

    阈值处理 定义 阈值处理即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个...

  • 阈值处理

    阈值处理 阈值处理即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个临界灰...

  • ITK 基础(二) — 图像分割 General Thresho

    General Threshold 介绍 上篇文章介绍了 ITK 中的二值化分割,最终得到的是 二值图像(图像中只...

  • 图像分割

    一、图像分割包括以下三种思路: A)基于灰度级的不连续性来查找区域间的边界;(Edge Detect)(霍夫变换和...

网友评论

      本文标题:案例二 图像分割

      本文链接:https://www.haomeiwen.com/subject/sukzwftx.html