我在我的测试应用程序中成功实现了OpenCV平方检测示例,但现在需要过滤输出,因为它非常混乱 - 或者我的代码是错误的?
我对本文的四个角点感兴趣,以减少偏斜(如此)和进一步处理......
原始图片:
码:
double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) {
double dx1 = pt1.x - pt0.x;
double dy1 = pt1.y - pt0.y;
double dx2 = pt2.x - pt0.x;
double dy2 = pt2.y - pt0.y;
return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}
- (std::vector<std::vector<cv::Point> >)findSquaresInImage:(cv::Mat)_image
{
std::vector<std::vector<cv::Point> > squares;
cv::Mat pyr, timg, gray0(_image.size(), CV_8U), gray;
int thresh = 50, N = 11;
cv::pyrDown(_image, pyr, cv::Size(_image.cols/2, _image.rows/2));
cv::pyrUp(pyr, …Run Code Online (Sandbox Code Playgroud) 我是openCV的新手,因此在过去的3到4天里一直在努力,我已经检测到纸张边界,现在我想在角落上绘制4个圆圈.
我从这段代码中画出边界
const cv::Point* p = &squares[i][0];
int n = (int)squares[i].size();
polylines(image, &p,&n, 1, true, Scalar(255,255,0), 5, CV_AA);
Run Code Online (Sandbox Code Playgroud)
我是openCV的新手,所以在我看来我有左上角点p-> x和p-> y,但是我如何得到其他角落,我也对这个折线方法中的参数&n感到困惑,这个折线方法怎么样绘制完整的矩形?
当我使用边界矩形时,它并不完美,它给纸张侧面留下了一点空间.
任何帮助都非常感谢
代码是:
- (cv::Mat)finshWork:(cv::Mat &)image
{
// read in the apple (change path to the file)
Mat img0 =image;// imread("/home/philipp/img/apple.jpg", 1);
Mat img1;
cvtColor(img0, img1, CV_RGB2GRAY);
// apply your filter
Canny(img1, img1, 100, 200);
// find the contours
vector< vector<cv::Point> > contours;
findContours(img1, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
/////for SQUARE CODE
std::vector<std::vector<cv::Point> > squares;
std::vector<cv::Point> approx;
for( size_t i = …Run Code Online (Sandbox Code Playgroud) 我正在努力从BufferedImage中提取快速有效的矩形字.
例如,我有以下页面:(编辑!)图像被扫描,因此它可能包含噪音,歪斜和失真.

如何在没有矩形的情况下提取以下图像:(编辑!)我可以使用OpenCv或任何其他库,但我是高级图像处理技术的新手.

编辑
我已经使用了karlphillip 这里建议的方法,它工作得体.
这是代码:
package ro.ubbcluj.detection;
import java.awt.FlowLayout;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
public class RectangleDetection {
public static void main(String[] args) throws IOException {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat image = loadImage();
Mat grayscale = convertToGrayscale(image);
Mat treshold = tresholdImage(grayscale);
List<MatOfPoint> contours …Run Code Online (Sandbox Code Playgroud) 我有一只手的X射线图像.我需要自动提取骨骼.我可以使用不同的技术轻松分割手.但我需要得到骨头并使用这些技术无济于事.有些骨头比其他骨头更亮,所以如果我使用阈值处理,其中一些骨头会消失,而其他骨骼则会变得更清晰.我想也许我应该只限制一个手的区域?是否可以限制不是正方形的投资回报率?哦,也许你有任何其他解决方案,建议?也许有一些像OpenCV这样的图书馆?任何帮助都会非常棒!
扩展:

原始图像 预期输出