我有一个咖啡罐的图像,橙色的盖子位置,我想找到.就这个.
gcolor2实用程序显示盖子中心的HSV为(22,59,100).问题是如何选择颜色的限制呢?我尝试了min =(18,40,90)和max =(27,255,255),但是出乎意料
这是Python代码:
import cv
in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'
ORANGE_MIN = cv.Scalar(18, 40, 90)
ORANGE_MAX = cv.Scalar(27, 255, 255)
COLOR_MIN = ORANGE_MIN
COLOR_MAX = ORANGE_MAX
def test1():
frame = cv.LoadImage(in_image)
frameHSV = cv.CreateImage(cv.GetSize(frame), 8, 3)
cv.CvtColor(frame, frameHSV, cv.CV_RGB2HSV)
frame_threshed = cv.CreateImage(cv.GetSize(frameHSV), 8, 1)
cv.InRangeS(frameHSV, COLOR_MIN, COLOR_MAX, frame_threshed)
cv.SaveImage(out_image_thr, frame_threshed)
if __name__ == '__main__':
test1()
Run Code Online (Sandbox Code Playgroud) 我使用python cv2(window10,python2.7)在图像中写入文本,当文本是英文时它可以工作,但是当我使用中文文本时它会在图像中写出乱码.
以下是我的代码:
# coding=utf-8
import cv2
import numpy as np
text = "Hello world" # just work
# text = "??????" # messy text in the image
cv2.putText(img, text,
cord,
font,
fontScale,
fontColor,
lineType)
# Display the image
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
当text = "Hello world" # just work
下面是输出图像时:
当text = "??????" # Chinese text, draw messy text in the image
下面是输出图像时:
怎么了?opencv putText
不支持其他语言文本吗?
我使用opencv的全景拼接算法,以便将2或3个图像拼接成一个新的结果图像.
我有每个源图像中的点坐标.我需要计算结果图像中这些点的新坐标.
我在下面描述算法.我的代码类似于opencv(分支3.4)中的"stitching_detailed"示例.产生了一种result_mask
类型Mat
,也许是解决方案?但我不知道如何使用它.我在这里找到了一个相关的问题,但没有找到缝合.
任何的想法?
找到features
每个图像:
Ptr<FeaturesFinder> finder = makePtr<SurfFeaturesFinder>()
vector<ImageFeatures> features(num_images);
for (int i = 0; i < num_images; ++i)
{
(*finder)(images[i], features[i]);
}
Run Code Online (Sandbox Code Playgroud)
制作pairwise_matches
:
vector<MatchesInfo> pairwise_matches;
Ptr<FeaturesMatcher> matcher = makePtr<BestOf2NearestMatcher>(false, match_conf);
(*matcher)(features, pairwise_matches);
Run Code Online (Sandbox Code Playgroud)
重新排序图像:
vector<int> indices = leaveBiggestComponent(features, pairwise_matches, conf_thresh);
# here some code to reorder 'images'
Run Code Online (Sandbox Code Playgroud)
估计单应性cameras
:
vector<CameraParams> cameras;
Ptr<Estimator> estimator = makePtr<HomographyBasedEstimator>();
(*estimator)(features, pairwise_matches, cameras);
Run Code Online (Sandbox Code Playgroud)
转换为CV_32F
: …
我看到声明pyrDown
:
CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,
const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );
Run Code Online (Sandbox Code Playgroud)
所以我假设第三个参数dstsize
可能是这样的:Size(src.cols/4, src.rows/4
.但正如文档所说:
在任何情况下,都应满足以下条件:
所以只有默认大小Size((src.cols+1)/2, (src.rows+1)/2)
是合法的.那为什么dstsize
需要参数呢?看起来好无用......
在这里我找到一个类似的问题帖子:
http://answers.opencv.org/question/25281/pyrup-only-for-doubling-size/
和@berak评论说:
金字塔只能以2的力量工作
虽然我认为金字塔只能在2的力量中工作,这是真的吗?
我试图通过移动相机检测房间条件下的图片(黑白素描)是否有颜色.
我已经能够得到这个结果
使用以下代码
Mat dest = new Mat (sections[i].rows(),sections[i].cols(),CvType.CV_8UC3);
Mat hsv_image = new Mat (sections[i].rows(),sections[i].cols(),CvType.CV_8UC3);
Imgproc.cvtColor (sections[i],hsv_image,Imgproc.COLOR_BGR2HSV);
List <Mat> rgb = new List<Mat> ();
Core.split (hsv_image, rgb);
Imgproc.equalizeHist (rgb [1], rgb [2]);
Core.merge (rgb, sections[i]);
Imgproc.cvtColor (sections[i], dest, Imgproc.COLOR_HSV2BGR);
Core.split (dest, rgb);
Run Code Online (Sandbox Code Playgroud)
我怎样才能成功地发现图像是否有颜色.颜色可以是任何颜色,它有房间条件.因为我是初学者,请帮助我.
谢谢
我可以使用cv2读取jpg文件
import cv2
import numpy as np
import urllib
url = r'http://www.mywebsite.com/abc.jpg'
req = urllib.request.urlopen(url)
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
img = cv2.imdecode(arr,-1)
cv2.imshow('abc',img)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用gif文件时,它会返回一个错误:
error: (-215) size.width>0 && size.height>0 in function cv::imshow
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题呢?
我正在使用树莓派来捕获视频的前 20 帧。现在这更像是一个概念问题,但是在浏览关于 videoCapture 的 openCV 文档时,他们强调了在此代码中发布捕获的重要性(如其网站上发布的那样):
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
的重要性是cap.release()
什么?省略这一行是否有任何记忆含义?如果是,它们是什么,为什么?
如何从图像中裁剪凹面多边形.我的输入图像看起来像
.
闭合多边形的坐标是[10,150],[150,100],[300,150],[350,100],[310,20],[35,10].我希望使用opencv裁剪由凹多边形限定的区域.我搜索了其他类似的问题,但我找不到正确的答案.那就是我问的原因?你能帮助我吗.
任何帮助将非常感谢.!!!
我是OpenCV的初学者.我想围绕我检测到的标记制作边界框.
你能告诉我怎样才能用OpenCV(Python)做到这一点?
我正在使用Python 3.6.3和openCV
box =np.int0(cv2.cv.BoxPoints(marker))
Run Code Online (Sandbox Code Playgroud)
输出:
Error showing cv2.cv2 has no module cv
Run Code Online (Sandbox Code Playgroud) 我想编写一个函数模板,并将其复制指针引用数据T* image
来cv::Mat
.我很困惑如何推广T和cv_type匹配.
template<typename T>
cv::Mat convert_mat(T *image, int rows, int cols) {
// Here we need to match T to cv_types like CV_32F, CV_8U and etc.
// The key point is how to connect these two
cv::Mat mat(rows, cols, cv_types, image);
return mat;
}
Run Code Online (Sandbox Code Playgroud)
我是模板编程的新手,我很困惑如何实现T-cv_types对应.
任何人有任何想法?谢谢!!!