小编Kin*_*t 金的帖子

使用`cv :: inRange`(OpenCV)为颜色检测选择正确的上下HSV边界

我有一个咖啡罐的图像,橙色的盖子位置,我想找到.就这个图片.

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)

opencv hsv color-detection

67
推荐指数
7
解决办法
17万
查看次数

如何使用`cv2.putText`正确地在图像上绘制中文文本?(Python的+ OpenCV的)

我使用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不支持其他语言文本吗?

python opencv cv2

8
推荐指数
2
解决办法
6266
查看次数

拼接后计算源图像的坐标

我使用opencv的全景拼接算法,以便将2或3个图像拼接成一个新的结果图像.

我有每个源图像中的点坐标.我需要计算结果图像中这些点的新坐标.

我在下面描述算法.我的代码类似于opencv(分支3.4)中的"stitching_detailed"示例.产生了一种result_mask类型Mat,也许是解决方案?但我不知道如何使用它.我在这里找到了一个相关的问题,但没有找到缝合.

任何的想法?

这是算法(详细代码:stitching_detailed.cpp):

找到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: …

c++ opencv image-processing computer-vision image-stitching

8
推荐指数
1
解决办法
473
查看次数

这是OpenCV函数"pyrDown"的设计错误吗

我看到声明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的力量中工作,这是真的吗?

c++ python opencv image-processing

7
推荐指数
1
解决办法
1397
查看次数

如何使用OpenCV检测图像中的彩色色块?

我试图通过移动相机检测房间条件下的图片(黑白素描)是否有颜色.

在此输入图像描述

我已经能够得到这个结果

在此输入图像描述

使用以下代码

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)

我怎样才能成功地发现图像是否有颜色.颜色可以是任何颜色,它有房间条件.因为我是初学者,请帮助我.

谢谢

opencv image-processing computer-vision color-detection

6
推荐指数
1
解决办法
2299
查看次数

如何使用opencv(python)从url读取gif

我可以使用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)

如何解决这个问题呢?

python opencv

6
推荐指数
1
解决办法
7033
查看次数

cv2.videoCapture.release() 是什么意思?

我正在使用树莓派来捕获视频的前 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()什么?省略这一行是否有任何记忆含义?如果是,它们是什么,为什么?

python opencv raspberry-pi

6
推荐指数
2
解决办法
2万
查看次数

使用Opencv python从Image中裁剪凹面多边形

如何从图像中裁剪凹面多边形.我的输入图像看起来像 这个.

闭合多边形的坐标是[10,150],[150,100],[300,150],[350,100],[310,20],[35,10].我希望使用opencv裁剪由凹多边形限定的区域.我搜索了其他类似的问题,但我找不到正确的答案.那就是我问的原因?你能帮助我吗.

任何帮助将非常感谢.!!!

python opencv crop image-processing

6
推荐指数
2
解决办法
7608
查看次数

为什么不能在OpenCV(Python)中使用`cv2.cv.BoxPoints`?

我是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)

opencv image-processing computer-vision python-3.x

5
推荐指数
1
解决办法
1万
查看次数

如何使用模板函数从缓冲区(T*数据数组)创建cv :: Mat?

我想编写一个函数模板,并将其复制指针引用数据T* imagecv::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对应.

任何人有任何想法?谢谢!!!

c++ templates opencv

5
推荐指数
1
解决办法
2601
查看次数