在图像上运行Canny边缘检测器后,我得到清晰的线条.但是当在Canny edgemap图像上运行时,Hough线函数似乎在相当突出的线上丢失了.我只保留垂直和水平的Hough线(公差为15度).很多额外的线条出现了,但是没有拾取明确可见的线条限制矩形.
这是片段:
cvCanny( img, canny, 0, 100, 3 );
lines = cvHoughLines2( canny, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 35, 20, 10 );
Run Code Online (Sandbox Code Playgroud)
主要目的是检测表示链表节点的矩形框.但是,square.c示例程序将只检测完美的矩形,而不是箭头触摸矩形边界.
你能否解释一下Hough线功能的变化,这有助于我获得与Canny边缘图像中清晰可见线相对应的线条?

如果在对比度较差的图像上进行直方图均衡,则其特征变得更加明显.然而,还有大量的谷物/斑点/噪音.使用OpenCV中已有的模糊功能是不可取的 - 我将在稍后对图像进行文本检测,字母将变得无法识别.那么应该应用哪些预处理技术呢?
我正在抑制Dicrete余弦变换(DCT)域中图像中几个(不相等)块的低DC频率.之后进行逆DCT以仅仅保留高频部分来恢复图像.
cvConvertScale( img , img_32 ); //8bit to 32bit conversion
cvMinMaxLoc( img_32, &Min, &Max );
cvScale( img_32 , img_32 , 1.0/Max ); //quantization for 32bit
cvDCT( img_32 , img_dct , CV_DXT_FORWARD ); //DCT
//display( img_dct, "DCT");
cvSet2D(img_dct, 0, 0, cvScalar(0)); //suppress constant background
//cvConvertScale( img_dct, img_dct, -1, 255 ); //invert colors
cvDCT( img_dct , img_out , CV_DXT_INVERSE ); //IDCT
//display(img_out, "IDCT");
Run Code Online (Sandbox Code Playgroud)

目的是识别和隔离图像中先前检测到的区域中存在于高频中的元素.然而,在一些情况下,文本非常薄且微弱(低对比度).在这些情况下,IDCT生成的图像非常暗,甚至高频部分也变得太微弱,无法进一步分析工作.
有什么操作可以让我们在背景抑制后从IDCT获得更清晰的图像?CvEqualizeHist()发出太大的噪音.
编辑:
整个图片上传为belisarius问.低频抑制不是在整个图像上进行,而是在设置为文本/低频部分周围的最小边界矩形的小ROI上进行.
如何识别另一个轮廓内的轮廓?我试图通过许多OpenCV教程,但我无法识别它.请一些专家提供简单的代码来解释一下吗?
这是我的输入文件

这个黑暗的部分是我需要识别的轮廓.

请善意与我分享您的经验.
如果不采用渐近符号,计算获得算法时间复杂度的唯一方法是乏味的步骤吗?如果没有每行代码的步数,我们可以得到任何程序的大O表示吗?
细节:试图找出几种数值分析算法的复杂性,以确定哪种算法最适合解决特定问题.例如 - 从用于求解方程的Regula-Falsi或Newton-Rhapson方法中,意图是评估每个方法的确切复杂性,然后决定(设置'n'或其他任何参数的值)哪个方法不那么复杂.
在8个顶点的无向随机图中,边在一对顶点之间存在的概率为1/2.长度为3的无序循环的预期数量是多少?
这是我想到的方法:
方法1 基本上,长度为3的周期("无序",我假设意味着可以以任何顺序采用顶点)将是三角形.
设顶点数= v,这些周期中没有一个是C
对于n = 3,C = 1
对于n = 4,c = 4.(具有2条对角线的正方形.4个独特的三角形).....
对于n> 3,C(n)=(n-2)+(n-2)(n-3)+(n-4),概括.
这是因为:让我们从外边开始,以三角形作为基础.对于我们选择的第一条边(去掉了2个顶点),有(n-2)个其他顶点来选择第三个三角形点.所以(n-2)在第一学期.
接下来,最后一个术语是因为我们选择以三角形为基础的最后一侧将最左边和最右边的三角形已经被我们选择的第一个边和它的前一个边.
中间项是剩余边数和可能三角形的乘积.
.--------.
. .
. .
. .
Run Code Online (Sandbox Code Playgroud)
通过上面的8个顶点集,人们可以在视觉上轻松地思考它.(如果需要更好的图表,我将做必要的!).因此对于v = 8,C(8)= 40.因此,边缘的概率是1/2...
方法2 来自n个点的三角形数是nC3,其中C是"组合".但是,预计这些边缘的一半不会存在...
我不确定如何超越这一点.任何正确方向的提示都会很棒.顺便说一句,这不是一个功课问题.
我试图用另一个文件中的位置或行号替换一个文件中的行,其中包含第一个文件的成员的唯一元素。
例如
file1.txt
----------
A
A
A
B
B
C
C
C
Run Code Online (Sandbox Code Playgroud)
第二个文件是
labels.txt
----------
A
B
C
Run Code Online (Sandbox Code Playgroud)
然后我试图获得以下输出:
1
1
1
2
2
3
3
3
Run Code Online (Sandbox Code Playgroud)
我尝试了一些变体grep,但没有任何一个可以正确执行此操作。
获取 labels.txt 中 file1.txt 中每个字母的行号可以正常工作:grep -n A labels.txt或grep -n B labels.txt
但是当我尝试使用这两个文件作为输入时:grep -n file1.txt labels.txt控制台上没有输出。
这在 Python 或其他语言中当然非常简单,但是它的 shell 版本会非常有用。(在从各种数据集的字符串制作分类标签时经常会出现这样的情况,这些标签可用于训练分类模型等。 )。
尝试运行此处给出的阻塞队列示例.
使用如该示例中所示的.NET Queue类,我收到以下错误:
let queue = new Queue<_>()
Run Code Online (Sandbox Code Playgroud)
"非泛型类型System.Collection.Queue不期望任何类型参数"
如果从队列创建中删除了type参数,则会更改通用性质type BlockingQueueAgent<'T>(maxLength).
除了实现我自己的队列类之外,有没有办法使用示例程序中使用的.NET Queue类?下面给出了整个代码,以防更具说明性.
open System
open System.IO
open System.Collections
//open System.Runtime.Serialization.Formatters.Binary
///defining Agent
type Agent<'T> = MailboxProcessor<'T>
///defining Message
type internal BlockingAgentMessage<'T> =
| Get of AsyncReplyChannel<'T>
| Add of 'T * AsyncReplyChannel<unit>
/// Agent-based implementation of producer/consumer problem
type BlockingQueueAgent<'T>(maxLength) =
let agent = Agent.Start(fun agent ->
let queue = new Queue<_>()
//let queue = new Queue()
// State machine running inside the agent
let …Run Code Online (Sandbox Code Playgroud) 使用5尝试这个简单的控制台输入后,结果显示为53
printfn "Enter no. of blocks: "
let nBlock = System.Console.Read()
printfn "entered value is %O" nBlock
Run Code Online (Sandbox Code Playgroud)
试图在互动上,仍然得到错误的结果.有解决方案吗?