OpenCV 自带库图像边缘计算

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
int main()
{
    cv::Mat srcImage = imread("..\\images\\building.jpg");
    if (!srcImage.data)
        return -1;
    cv::Mat srcGray;
    cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    imshow("srcGray", srcGray);
    // 定义边缘图,水平及垂直
    cv::Mat edgeMat, edgeXMat, edgeYMat;
    // 求x方向Sobel边缘
    Sobel(srcGray, edgeXMat, CV_16S, 1, 0, 3, 1,
        0, BORDER_DEFAULT);
    // 求y方向Sobel边缘
    Sobel(srcGray, edgeYMat, CV_16S, 0, 1, 3, 1,
        0, BORDER_DEFAULT);
    // 线性变换转换输入数组元素成8位无符号整型
    convertScaleAbs(edgeXMat, edgeXMat);
    convertScaleAbs(edgeYMat, edgeYMat);
    // x与y方向边缘叠加
    addWeighted(edgeXMat, 0.5, edgeYMat, 0.5, 0, edgeMat);
    cv::imshow("edgeYMat", edgeYMat);
    imshow("edgeMat", edgeMat);
    // 定义Scharr边缘图像
    cv::Mat edgeMatS, edgeXMatS, edgeYMatS;
    // 计算x方向Scharr边缘
    Scharr(srcGray, edgeXMatS, CV_16S, 1, 0, 1,
        0, BORDER_DEFAULT);
    convertScaleAbs(edgeXMatS, edgeXMatS);
    // 计算y方向Scharr边缘
    Scharr(srcGray, edgeYMatS, CV_16S, 0, 1, 1,
        0, BORDER_DEFAULT);
    // 线性变换转换输入数组元素成8位无符号整型
    convertScaleAbs(edgeYMatS, edgeYMatS);
    // x与y方向边缘叠加
    addWeighted(edgeXMatS, 0.5, edgeYMatS, 0.5, 0, edgeMatS);
    cv::imshow("edgeMatS", edgeMatS);
    cv::waitKey(0);
    return 0;
}



转载:http://blog.csdn.net/zhuwei1988

OpenCV 中,如果你想要加载并操作包含文字的图像(通常是位图或矢量格式),你可以使用 `imread()` 函数来读取图像文件,然后配合 `getText()` 或者 `findContours()` 等方法来识别文本。这里以读取位图图像为例: ```cpp #include <opencv2/opencv.hpp> int main() { // 加载图片 cv::Mat img = cv::imread("path_to_your_text_image.jpg", cv::IMREAD_COLOR); if (img.empty()) { std::cout << "Could not open or find the image." << std::endl; return -1; } // 如果需要检测和识别文本,可以尝试以下步骤: // 将图像转换为灰度图像 cv::Mat grayImg; cv::cvtColor(img, grayImg, cv::COLOR_BGR2GRAY); // 应用边缘检测(如Canny算子) cv::Canny(grayImg, grayImg, 50, 150); // 寻找轮廓(可能包含文本区域) std::vector<std::vector<cv::Point>> contours; cv::findContours(grayImg, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); for (const auto& contour : contours) { // 对每个轮廓进行进一步处理,比如 OCR(光学字符识别) cv::Rect boundingBox = cv::boundingRect(contour); cv::rectangle(img, boundingBox, cv::Scalar(0, 0, 255), 2); // 绘制边界框 } // 显示处理后的图像 cv::imshow("Detected Text", img); cv::waitKey(0); return 0; } ``` 在这个例子中,我们首先读取图像,然后将其转换为灰度并应用边缘检测。之后,我们找到轮廓并检测可能的文本区域。注意,这只是一个基础示例,实际的文本识别通常会更复杂,涉及到专门的,如 Tesseract OCR。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值