此声明在g ++ -pedantic -Wall(版本4.6.3)中编译时没有警告:
std::size_t foo = -42;
Run Code Online (Sandbox Code Playgroud)
不太明显的伪造是使用size_t参数声明一个函数,并使用负值调用它.这样的功能可以防止无意中的负面论证(看起来像是无数的庸俗,遵守§4.7/ 2)吗?
答案不完整:
只需将size_t更改为(signed)long就会丢弃size_t的语义和其他优点.
将其更改为ssize_t仅仅是POSIX,而不是标准.
将它改为ptrdiff_t是脆弱的,有时会破坏.
测试巨大的值(高位设置等)是任意的.
闪电问题在计算机视觉中很常见而且不是一件容易的事,但我只是想知道现在是否有适当的方法来检测和减少光反射以保存图像中的更多信息?我用OpenCV和Python尝试了几种没有运气的方法.
(带反射的图像)
(没有反射的图像)
我试图将图像分割为H,S,V颜色空间,并使用直方图均衡来均衡(V)通道.我用过Clahe均衡方法:
import cv2
import numpy as np
image = cv2.imread('glare.png')
hsv_image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
h, s, v = cv2.split(hsv_image)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
v = clahe.apply(v)
hsv_image = cv2.merge([h, s, v])
hsv_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2RGB)
cv2.imwrite('clahe_h.png', hsv_image)
Run Code Online (Sandbox Code Playgroud)
结果:
我也试图阈值图像找到明亮的空间,而不是使用Image Inpainting方法用相邻像素替换反射像素.
import cv2
import numpy as np
image = cv2.imread('glare.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)[1]
dst_TELEA = cv2.inpaint(image,thresh,3,cv2.INPAINT_TELEA)
cv2.imwrite('after_INPAINT.png',dst_TELEA)
Run Code Online (Sandbox Code Playgroud)
我想要一对转换算法,一个从RGB到YUV,另一个从YUV到RGB,它们是彼此相反的.也就是说,往返转换应保持值不变.(如果您愿意,将YUV替换为Y'UV,YUV,YCbCr,YPbPr.)
这样的事情存在吗?如果是这样,它是什么?
发布的解决方案(如何在C/C++中执行RGB-> YUV转换?,http://www.fourcc.org/fccyvrgb.php,http://en.wikipedia.org/wiki/YUV)只是反转(当省略钳位到[0,255]时,两个3x3矩阵是反转的).但是省略这种钳位可以产生负亮度,这会对YUV空间中的图像处理造成严重破坏.保持钳位使转换非线性,这使得定义逆变得棘手.
我有一个哈希,其中key是一个字符串,value是一个字符串数组.我想要这样的东西:
{"k1"=>["v1", "v2"], "k2"=>["v3", "v4"]}
Run Code Online (Sandbox Code Playgroud)
我只有一个哈希和一个数组来实现这一点.我编写了这样的代码:
hash1 = Hash.new
arr = Array.new
arr.push "v1"
arr.push "v2"
hash1["k1"] = arr
#hash is like this: {"k1"=>["v1", "v2"]
#Now I clear the array to read the new values
arr. clear
arr.push "v3"
arr.push "v4"
hash1["k2"] = arr
puts hash1
#Output: {"k1"=>["v3", "v4"], "k2"=>["v3", "v4"]}
#Notice that k1's value also got updated
Run Code Online (Sandbox Code Playgroud)
然后我换了一行:
hash1 = Hash.new
arr = Array.new
arr.push "v1"
arr.push "v2"
hash1["k1"] = arr
arr = [] # ** This is the …Run Code Online (Sandbox Code Playgroud) Linux的"man close"警告(SVr4,4.3BSD,POSIX.1-2001):
不检查close()的返回值是一个常见但严重的编程错误.很可能首先在最后的close()上报告先前write(2)操作的错误.关闭文件时不检查返回值可能会导致数据无声丢失.使用NFS和磁盘配额尤其可以观察到这种情况.
我可以相信这个错误是常见的(至少在应用程序中;我不是内核黑客).但是,在今天或过去三十年的任何时候,它有多严重?特别是:
是否存在这种静默数据丢失的简单,可重现的示例?即使是一个人为的人,比如在close()期间发送SIGKILL?
如果存在这样的示例,则可以比仅仅更优雅地处理数据丢失
printf("Sorry, dude, you lost some data.\n"); ?
Dir.glob("*.txt") {|f| p f} 打印文件名.
Dir.glob("*.txt").sort {|f| p f} 失败并出现ArgumentError.
Dir.glob("*.txt").sort.each {|f| p f} 按字母顺序打印文件名.
为什么第二个失败?更好的是,为什么第一个工作,有或没有.each?
Dir.glob并且Dir.glob.sort都是数组.Dir.glob.methods == Dir.glob.sort.methods.(受Dir.glob的Alphabetize结果的启发.与Dir.glob的重复并没有排序问题,因为"第三个"已经回答了那个人的问题.)
Are there any Hungarian-in-spirit style guides for appending (SI or Imperial) units to variable names for physics-intensive C/C++? I'd expected that this wheel had already been invented, but online I found only simple examples like duration_sec and length_ft. (No boost, please.) (Roughly related: naming of physical quantities in python .)
Typeset prose has a good style guide, but its superscripts, slashes and italics fail in programming languages.
I'd even be happy with arguments resolving particular issues that arise …
从shell提示符中,用于计算mm:ss值的表达式的最少键击方法是
4:33 + 0:20 - 2:45 = 2:08什么?
这是用于交互式使用,不用于脚本,或测量经过的时间,或任何类似的东西.没有老鼠.没有GUI.
有成千上万的实现mm+60*ss,并(mmss/60, mmss%60)在数百种语言.我可以用bash或ruby或C编写一个脚本来添加另一个实现.但它很可能是这轮并不需要重塑,当它有可能在某处埋藏bc,dc,irb,或者甚至在bash本身.
我有一个字符串向量,我打算将这些字符串连接成一个单独的字符串,用空格分隔.例如,如果我的向量包含值:此示例的示例字符串我希望输出为"此示例的示例字符串".
您需要任何有关实现此目标的最简单方法的输入吗?
谢谢
Ruby gem rmail具有解析本地磁盘上的邮箱文件的方法.不幸的是,这个宝石已经崩溃了(在Ruby 2.0.0中).它可能无法修复,因为人们正在迁移到gem mail.
Gem mail有方法Mail.read('filename.txt'),但只解析邮箱中的第一条消息.
那个宝石和内置Net::IMAP的网络已经充斥着通过imap访问邮箱的教程.
那么,有没有办法解析一个普通的旧文件,没有imap?作为我小组中唯一的rubyist,我宁愿不通过诉诸http://docs.python.org/2/library/mailbox.html来使自己难堪.
或者更糟糕的是,PHP是imap_open('/var/mail/www-data', ...)- 如果只Net::IMAP.new接受这样的文件名.
Visual Studio 2008,调试版本.这行C++
assert(true);
Run Code Online (Sandbox Code Playgroud)
导致投诉
warning C4365: 'argument' : conversion from 'long' to 'unsigned int', signed/unsigned mismatch
Run Code Online (Sandbox Code Playgroud)
当替换true为任何(有用的)布尔表达式时,警告仍然存在,即使使用1ul.
仅供参考,编译器的文件assert.h是:
#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
extern "C" _CRTIMP void __cdecl _wassert(_In_z_ const wchar_t * _Message, _In_z_ const wchar_t *_File, _In_ unsigned _Line);
Run Code Online (Sandbox Code Playgroud)
如何在不压制所有 C4365的情况下彻底抑制这个警告?这是__LINE__?? 的错吗?
当我在 sed 中构造一个复杂的操作时,我经常从
cat infile | sed 'expression1' | sed 'expr2' ...
Run Code Online (Sandbox Code Playgroud)
然后将其优化为
cat infile | sed 'expr1;expr2;expr3' | sed 'expr4' | sed 'expr5;expr6' ...
Run Code Online (Sandbox Code Playgroud)
对于哪些表达式可以与分号组合成单个命令,有哪些指导原则?到目前为止,我只是临时组合s///,而不是组合//d。
(优化是为了运行它数千万次。是的,它明显更快。)
(发布在这里而不是在 superuser.com 上,因为那里关于 sed 的问题少了 20 倍。)