【无标题】

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat image = imread("image.jpg", IMREAD_GRAYSCALE); // 读取灰度图像
    Mat edges;
    Canny(image, edges, 50, 150); // 边缘检测
    vector<Vec2f> lines;
    HoughLines(edges, lines, 1, CV_PI / 180, 100); // 霍夫变换检测直线
    for (size_t i = 0; i < lines.size(); i++)
    {
        float rho = lines[i][0], theta = lines[i][1];
        if (theta > CV_PI / 180 * 80 && theta < CV_PI / 180 * 100) // 判断直线是否与分界线相对应
        {
            Point pt1, pt2;
            double a = cos(theta), b = sin(theta);
            double x0 = a * rho, y0 = b * rho;
            pt1.x = cvRound(x0 + 1000 * (-b));
            pt1.y = cvRound(y0 + 1000 * (a));
            pt2.x = cvRound(x0 - 1000 * (-b));
            pt2.y = cvRound(y0 - 1000 * (a));
            line(image, pt1, pt2, Scalar(0, 0, 255), 3, LINE_AA); // 在图像上绘制直线
            cout << "Line coordinates: (" << pt1.x << ", " << pt1.y << ") - (" << pt2.x << ", " << pt2.y << ")" << endl; // 输出直线坐标
        }
    }
    imshow("Image", image);
    waitKey(0);
    return 0;
}

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat image = imread("noisy_image.jpg");

    // 灰度化处理
    Mat gray;
    cvtColor(image, gray, COLOR_BGR2GRAY);

    // 高斯滤波
    Mat blur;
    GaussianBlur(gray, blur, Size(5, 5), 0);

    // 二值化处理
    Mat binary;
    threshold(blur, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);

    // 形态学操作
    Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
    Mat result;
    morphologyEx(binary, result, MORPH_OPEN, kernel);

    // 显示结果
    imshow("Original Image", image);
    imshow("Processed Image", result);
    waitKey(0);

    return 0;
}

#include <iostream>
#include <vector>

using namespace std;

vector<int> findContinuousNumbers(vector<int>& nums, int n, int target) {
    vector<int> res;
    int left = 0, right = 0, count = 0;
    while (right < nums.size()) {
        if (nums[right] > target) {
            count++;
        }
        while (count >= n) {
            if (nums[left] > target) {
                count--;
            }
            left++;
        }
        if (right - left + 1 == n && count < n) {
            res.push_back(left);
        }
        right++;
    }
    return res;
}

int main() {
    vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int n = 3, target = 5;
    vector<int> res = findContinuousNumbers(nums, n, target);
    for (int i = 0; i < res.size(); i++) {
        cout << res[i] << " ";
    }
    cout << endl;
    return 0;
}

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat image = imread("image.jpg", IMREAD_GRAYSCALE);

    // 定义特定像素值
    int Special_Value = 128;

    // 定义连续像素数
    int N = 5;

    // 定义保存像素值的数组
    vector<int> row_values;

    // 遍历所有像素行
    for (int i = 0; i < image.rows; i++)
    {
        // 获取当前行
        Mat row = image.row(i);

        // 将当前行像素值保存到数组中
        row_values.clear();
        for (int j = 0; j < row.cols; j++)
        {
            row_values.push_back(row.at<uchar>(j));
        }

        // 判断该行像素中有没有连续N个像素值等于指定像素值Special_Value
        for (int j = 0; j < row_values.size() - N + 1; j++)
        {
            bool flag = true;
            for (int k = j; k < j + N; k++)
            {
                if (row_values[k] != Special_Value)
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
            {
                // 返回这一段像素的坐标
                cout << "Row: " << i << ", Start: " << j << ", End: " << j + N - 1 << endl;
            }
        }
    }

    return 0;
}

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    // 加载图像
    Mat image = imread("image.jpg", IMREAD_GRAYSCALE);

    // 定义数组保存每一行像素的灰度值
    int rows = image.rows;
    int cols = image.cols;
    int* grayValues = new int[rows];

    for (int i = 0; i < rows; i++) {
        int sum = 0;
        for (int j = 0; j < cols; j++) {
            sum += image.at<uchar>(i, j);
        }
        grayValues[i] = sum / cols;
    }

    // 查找符合条件的像素段
    int N = 10;
    int Special_Value = 128;
    int start = -1;
    int end = -1;

    for (int i = 0; i < rows; i++) {
        int count = 0;
        for (int j = 0; j < cols; j++) {
            if (image.at<uchar>(i, j) == Special_Value) {
                count++;
                if (count == N && start == -1) {
                    start = j - N + 1;
                }
                if (count == N) {
                    end = j;
                }
            } else {
                count = 0;
                start = -1;
                end = -1;
            }
        }
        if (start != -1 && end != -1) {
            // 返回坐标
            std::cout << "start: (" << i << ", " << start << ")" << std::endl;
            std::cout << "end: (" << i << ", " << end << ")" << std::endl;
            start = -1;
            end = -1;
        }
    }

    return 0;
}

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("your_image_path");
    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    int rows = grayImage.rows;
    int cols = grayImage.cols;
    int* rowValues = new int[rows];
    for (int i = 0; i < rows; i++) {
        int sum = 0;
        for (int j = 0; j < cols; j++) {
            sum += grayImage.at<uchar>(i, j);
        }
        rowValues[i] = sum / cols;
    }

    int N = 10;
    int Special_Value = 128;
    int start = -1;
    int end = -1;
    for (int i = 0; i < rows; i++) {
        int count = 0;
        for (int j = 0; j < cols; j++) {
            if (grayImage.at<uchar>(i, j) == Special_Value) {
                count++;
                if (count == N && start == -1) {
                    start = j - N + 1;
                }
                if (count > N) {
                    end = j;
                    break;
                }
            } else {
                count = 0;
                start = -1;
            }
        }
        if (end != -1) {
            break;
        }
    }

    for (int i = 0; i < rows; i++) {
        if (start != -1 && end != -1) {
            cv::line(image, cv::Point(start, i), cv::Point(end, i), cv::Scalar(0, 0, 255), 2);
        }
    }

    delete[] rowValues;

    cv::imshow("result", image);
    cv::waitKey(0);
    return 0;
}

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat img = imread("image.jpg", IMREAD_GRAYSCALE);

    // 定义参数
    int N = 10; // 至少连续N个像素
    int V = 128; // 指定像素值V

    // 定义数组保存每一行像素的灰度值
    int row_gray[img.rows];

    // 遍历所有像素行
    for (int i = 0; i < img.rows; i++)
    {
        // 获取当前行的像素指针
        uchar* p = img.ptr<uchar>(i);

        // 计算当前行的灰度值
        int gray_sum = 0;
        for (int j = 0; j < img.cols; j++)
        {
            gray_sum += p[j];
        }
        row_gray[i] = gray_sum / img.cols; // 保存当前行的灰度值

        // 若其中至少连续N个像素都等于指定像素值V
        int start = -1, end = -1;
        for (int j = 0; j < img.cols; j++)
        {
            if (p[j] == V)
            {
                if (start == -1)
                {
                    start = j;
                }
                if (j == img.cols - 1 && j - start + 1 >= N)
                {
                    end = j;
                }
            }
            else
            {
                if (start != -1 && j - start >= N)
                {
                    end = j - 1;
                    break;
                }
                start = -1;
            }
        }

        // 求这一行像素中值为V的最长连续子串(长度大于N)的起点和终点的坐标值
        if (start != -1 && end != -1)
        {
            // 在符合条件的起点和终点的坐标之间画一条线
            line(img, Point(start, i), Point(end, i), Scalar(255, 0, 0), 2);
        }
    }

    // 显示图像
    imshow("Image", img);
    waitKey(0);

    return 0;
}

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("image.jpg");
    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    int rows = grayImage.rows;
    int cols = grayImage.cols;
    int* grayValues = new int[rows * cols];
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            grayValues[i * cols + j] = grayImage.at<uchar>(i, j);
        }
    }

    int V = 128; // 值为V的连续子串
    int N = 10; // 子串长度大于N
    int M = 50; // 子串长度小于M
    for (int i = 0; i < rows; i++) {
        int start = -1;
        int end = -1;
        int count = 0;
        for (int j = 0; j < cols; j++) {
            if (grayValues[i * cols + j] == V) {
                if (start == -1) {
                    start = j;
                }
                count++;
            } else {
                if (count > N && count < M) {
                    end = j - 1;
                    cv::line(image, cv::Point(start, i), cv::Point(end, i), cv::Scalar(0, 0, 255), 2);
                }
                start = -1;
                count = 0;
            }
        }
        if (count > N && count < M) {
            end = cols - 1;
            cv::line(image, cv::Point(start, i), cv::Point(end, i), cv::Scalar(0, 0, 255), 2);
        }
    }

    cv::imshow("Image", image);
    cv::waitKey(0);

    delete[] grayValues;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值