http://nuigroup.com/?ACT=28&fid=27&aid=1892_H6eNAaign4Mrnn30Au8d
我正在使用下面的图像进行测试,绿色矩形显示感兴趣的区域.

我在想,如果有可能实现,我希望使用的简单组合的效果cv::getPerspectiveTransform和cv::warpPerspective.我正在分享我到目前为止所写的源代码,但它不起作用.这是结果图像:

因此,有一个vector<cv::Point>是定义感兴趣的区域,但点不存储在任何特定的顺序载体内,这件事情我不能在检测过程中发生改变.无论如何,稍后,向量中的点用于定义a RotatedRect,而这又用于组装cv::Point2f src_vertices[4];,所需的变量之一cv::getPerspectiveTransform().
我对顶点及其组织方式的理解可能是其中一个问题.我还认为使用a RotatedRect不是存储ROI原始点的最佳方法,因为坐标会稍微改变以适应旋转的矩形,这并不是很酷.
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
cv::Mat src = cv::imread(argv[1], 1);
// After some magical procedure, these are points detect that represent …Run Code Online (Sandbox Code Playgroud) 我在IOS中使用开放式CV.我已经在图像中检测到纸张的边界,如图所示,现在我必须在触摸时拖动这些边界线以调整裁剪框.我们如何调整边界线以及如何在边界内裁剪图像?
这可以在openCV中使用或者我使用openGL吗?
@moosgummi:我用下面的方法调用你的方法
- (cv::Mat)finshWork:(cv::Mat &)image
{
Mat img0 =image;
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);
// you could also reuse img1 here
Mat mask = Mat::zeros(img1.rows, img1.cols, CV_8UC1);
// CV_FILLED fills the connected components found
drawContours(mask, contours, -1, Scalar(255), CV_FILLED);
// let's create a new image now
Mat crop(img0.rows, img0.cols, CV_8UC3);
// set background to green
crop.setTo(Scalar(0,255,0));
// and copy …Run Code Online (Sandbox Code Playgroud) 附件1是来自名为GeniusScan的应用程序的屏幕截图,您可以在其中拍摄任何文档,并在imageview上显示可调整的矩形网格.您可以用手指轻松调整网格边框,以选择要扫描的图像部分.然后它将转变为正确的前景.
1-如何在imageview上绘制网格并与其交互?
2-如何将网格的角点返回到视图控制器.

更新:我发现了一个名为BJImageCropper的精彩类,它允许使用手指调整边框,但仅限于矩形框.任何人都可以建议如何更新它以支持像GeniusScan应用程序中的形状?