我有对象让我们说模型图像.我想计算模型图像上的对象和目标图像上的对象之间的变换(位移,缩放,旋转).我想假设对象可以被视为2D,因此只应计算2D变换.
首先,我想以手动辅助方式进行操作.用户在模型图像上选择基点,然后在目标图像上选择目标点.点数应由用户定义(但不低于最低2-3点).当点给出不同的信息时,应该对变换进行平均,并且例如由此可以计算匹配的质量.
所以问题是关于计算两组点的变换,但正如我想在图像上做的那样,我添加了图像处理标签.
特别欢迎使用一些代码或伪代码的参考和建议.
有两点是非常容易的问题,只应采用线的旋转,比例和位移,但如何用更多的点来做,并对其进行平均并计算一些质量因素.
目前的解决方案是
void transformFnc(std::vector<PointF> basePoints, std::vector<PointF> targetPoints,
PointF& offset, double rotation, double scale)
{
std::vector<Line> basePointsLines;
std::vector<Line> targetPointsLines;
assert(basePoints.size() == targetPoints.size());
int pointsNumber = basePoints.size();
for(int i = 0; i < pointsNumber; i++)
{
for(int j = i + 1; j < pointsNumber; j++)
{
basePointsLines.push_back(Line(basePoints[i], basePoints[j]));
targetPointsLines.push_back(Line(targetPoints[i], targetPoints[j]));
}
}
std::vector<double> scalesVector;
std::vector<double> rotationsVector;
double baseCenterX = 0, baseCenterY = 0, targetCenterX = 0, targetCenterY = 0;
for(std::vector<Line>::iterator it = basePointsLines.begin(), i = targetPointsLines.begin();
it …Run Code Online (Sandbox Code Playgroud) 我正在尝试了解OpenCV fitLine()算法.
这是来自OpenCV的代码片段:
icvFitLine2Dfunction - icvFitLine2D
我看到有一些随机函数选择点进行近似,然后计算从点到拟合线的距离(选择点),然后选择其他点并尝试最小化距离并选择distType.
有人可以澄清从没有硬数学并假设没有伟大的统计知识的这一刻发生的事情吗?OpenCV代码注释和变量名称无助于我理解这段代码.
我有低对比度图像分割的问题.任务是找到表面缺陷.它们是可见的(缺陷总是暗区)但图像的对比度非常低.以下两个样本.

我尝试过增强对比度然后进行阈值处理:
Mat tmp1 = imread("C:\\framesRoi\\311.bmp",0);
stretchContrast(tmp1);
threshold(tmp1,tmp1,75,255,THRESH_BINARY);
Run Code Online (Sandbox Code Playgroud)
拉伸对比度的地方:
int minValue = 255, maxValue = 0;
const int l = sourceImg.cols * sourceImg.rows * sourceImg.channels();
if(sourceImg.isContinuous())
{
uchar* ptr = sourceImg.ptr<uchar>(0);
for(int i = 0; i < l; ++i)
{
if(ptr[i] < minValue)
{
minValue = ptr[i];
}
if(ptr[i] > maxValue)
{
maxValue = ptr[i];
}
}
}
cout<<"min: "<<minValue<<";"<<"max value: "<<maxValue<<endl;
const int magicThreshold = 10;
if(sourceImg.isContinuous())
{
uchar* ptr = sourceImg.ptr<uchar>(0);
for(int i = 0; i < l; …Run Code Online (Sandbox Code Playgroud) 我想将数字转换为QString3位有效数字.
QString::number(myNumber,'f',3);
Run Code Online (Sandbox Code Playgroud)
做的工作但仍然落后零.没有它们如何使用它.
我也试过了'g',哪些不应该留下那些零:
QString::number(myNumber,'g',3);
Run Code Online (Sandbox Code Playgroud)
但是例如472.76被转换为473.这让我感到惊讶.为什么'g'选择这样呢?
但是我对'f'格式很感兴趣.所以主要的问题是如何在'f'没有尾随零的情况下完成它?
输入 - >所需的输出
472.76 - > 472.76
0.0766861 - > 0.077
180.00001 - > 180
我有以下代码:
class A : public QObject
{
Q_OBJECT
public:
A() : QObject()
{
moveToThread(&t);
t.start();
}
~A()
{
t.quit();
t.wait();
}
void doSomething()
{
QMetaObject::invokeMethod(this,"doSomethingSlot");
}
public slots:
void doSomethingSlot()
{
//do something
emit ready();
}
signals:
void ready();
private:
QThread t;
}
Run Code Online (Sandbox Code Playgroud)
问题为什么doSomething必须通过它来调用QMetaObject::invokeMethod.我知道连接类型有一些东西.有人可以解释引擎盖下的内容吗?
我在两个具有相同物体的图像上找到了轮廓,我想找到这个物体的位移和旋转.我已经与这个轮廓的旋转边框,然后它的角度和中心点,但包围盒旋转试过不告诉轮廓旋转正确,因为它是相同的角度A + 0,+ 90,A + 180等.度.找到轮廓的旋转和位移是否还有其他好的方法?也许有些使用凸壳,凸度缺陷?我在学习OpenCv中读过有关匹配轮廓的内容,但它没有帮助.有人会举一些例子吗?
//编辑:也许有一些方法可以使用类似于freeman链的东西吗?但我现在无法弄清楚算法.用序列点之间的角度制作链然后检查序列匹配是不行的...
使用OpenCV fitEllipse进行圆拟合是否有效.fitEllipse()返回cv::RotatedRect平均宽度和高度以获得拟合圆半径的方法?
我最近阅读了有关内存碎片的主题: 如何解决内存碎片和什么是内存碎片?
我想在这些文章中看到一些内存分配图,例如作者http://pavlovdotnet.wordpress.com/2007/11/10/memory-fragmentation/
你可以推荐一些工具来获取这样的内存分配映射,这样我就可以看到内存是否碎片化以及可用的最大可用空间是多少.
我在Windows上,所以我更喜欢在这个系统上工作的工具.
在上图中有一些几何图案.模型a距离是已知的.点严格不在模型距离内.

我想要:
a)更好的点适合模式更好的质量系数它应该有(我试图采取距离和45度角)到目前为止我尝试过的:
a - delta和之间)a + delta失败的原因:
所以问题是:在这种情况下,计算点质量的最佳算法是什么,以及填充模式.应该通过考虑邻居位置的元素的平均位置来填充模式.最好的答案是伪代码或代码或对某些已知算法的引用,在这种情况下可能会有所帮助.
问题与我之前的问题有点相关,用点模式填充矩形,但填充不能用错误的质量点完成.
我有耗时的图像加载(图像很大),加载时也会对其进行一些操作.我不想阻止应用程序GUI.
我的想法是在另一个线程中加载图像,发出加载图像的信号,然后用这个图像重绘视图.
我的方法:
void Window::loadImage()
{
ImageLoader* loaderThread = new ImageLoader();
connect(loaderThread,SIGNAL(imageLoaded()),this,SLOT(imageLoadingFinished());
loaderThread->loadImage(m_image, m_imagesContainer, m_path);
}
void Window::imageLoadingFinished()
{
m_imagesContainer->addImage(m_image);
redrawView();
}
class ImageLoader : public QThread
{
Q_OBJECT
public:
ImageLoader(QObject *parent = 0) : m_image(NULL), m_container(NULL)
void loadImage(Image* img, Container* cont, std::string path)
{
m_image = img;
m_container = cont;
...
start();
}
signals:
void imageLoaded();
protected:
void run()
{
//loading image and operations on it
emit imageLoaded();
}
protected:
Image* m_image;
Container* m_container;
}
Run Code Online (Sandbox Code Playgroud)
我基于quedcustomtypeQt编写此代码的示例.当在stackoverflow中搜索和搜索时,我也发现子类化QThread …